commit aa4214c195a1c56a1d99a07d01affe6db3beaf0f Author: CI Publish Bot Date: Sun May 31 21:19:21 2026 +0000 Public release from ruodoo-project: 19.0 - 2026-05-31 21:19:12 UTC diff --git a/access_apps/README.rst b/access_apps/README.rst new file mode 100644 index 00000000..f87af79e --- /dev/null +++ b/access_apps/README.rst @@ -0,0 +1,30 @@ +.. image:: https://itpp.dev/images/infinity-readme.png + :alt: Tested and maintained by IT Projects Labs + :target: https://itpp.dev + +======================== + Control access to Apps +======================== + +Allows to configure administrators which don't have access to Apps. + +Adds **Apps access** selection in user's access rights tab. Two options are available: + +* *Allow installing apps* +* *Allow installing apps only from settings* + +Questions? +========== + +To get an assistance on this module contact us by email :arrow_right: help@itpp.dev + +Contributors +============ +* `Ivan Yelizariev `__ +* `Ildar Nasyrov `__ + + +Further information +=================== + +Tested on `Odoo 17.0 `_ diff --git a/access_apps/__init__.py b/access_apps/__init__.py new file mode 100644 index 00000000..071962a3 --- /dev/null +++ b/access_apps/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import uninstall_hook diff --git a/access_apps/__manifest__.py b/access_apps/__manifest__.py new file mode 100644 index 00000000..3c41044d --- /dev/null +++ b/access_apps/__manifest__.py @@ -0,0 +1,29 @@ +# Copyright 2018,2021 Ivan Yelizariev +# Copyright 2018 Ildar Nasyrov +# License MIT (https://opensource.org/licenses/MIT). +{ + "name": """Control access to Apps""", + "summary": """You can configure administrators which don't have access to Apps""", + "category": "Extra Tools", + # "live_test_url": "", + "images": ["images/banner.png"], + "version": "19.0.2.0.0", + "application": False, + "author": "IT-Projects LLC, Ivan Yelizariev", + "support": "apps@itpp.dev", + "website": "https://twitter.com/OdooFree", + "license": "Other OSI approved licence", # MIT + # "price": 10.00, + "currency": "EUR", + "depends": ["access_restricted"], + "external_dependencies": {"python": [], "bin": []}, + "data": ["security/access_apps_security.xml", "security/ir.model.access.csv"], + "demo": [], + "qweb": [], + "post_load": None, + "pre_init_hook": None, + "post_init_hook": None, + "uninstall_hook": "uninstall_hook", + "auto_install": False, + "installable": True, +} diff --git a/access_apps/doc/changelog.rst b/access_apps/doc/changelog.rst new file mode 100644 index 00000000..87762f64 --- /dev/null +++ b/access_apps/doc/changelog.rst @@ -0,0 +1,37 @@ +`2.0.0` +------- +- **Fix:** restore original access rights on uninstallation +- **Fix:** error in Settings menu when some modules are installed + +`1.3.3` +------- +- **Fix:** Grant `Allow installing apps` to Admin and System users (it was only System) + +`1.3.2` +------- + +- **Fix:** allow users in group `Allow install apps only from settings` also to uninstall from settings +- **Fix:** `Allow install apps only from settings` security group should imply `Administration: Settings` - no access to settings otherwise + +`1.3.1` +------- + +- **Fix:** `Access Error` when administrators without access to apps trying to open ``[[ Website Admin ]] >> Configuratiion >> Settings`` + +`1.3.0` +------- + +- **Fix:** the "Allow install apps" group is now implies "Administration: Settings" ("base.group_system") since in Odoo 11.0 only group_system users can install apps + +`1.2.0` +------- + +- **Improvement:** rename "Show Apps Menu" to "Allow install apps" +- **New:** "Allow install apps only from settings" +- **Improvement:** group "Show Apps Menu" and "Allow install apps only from settings" under "Apps access" security category + +`1.0.1` +------- + +- **Fix:** updates for recent odoo 9.0 +- **Improvement:** apps dashboard can be showed if user has access 'Show Apps Menu' diff --git a/access_apps/doc/index.rst b/access_apps/doc/index.rst new file mode 100644 index 00000000..7eb646c1 --- /dev/null +++ b/access_apps/doc/index.rst @@ -0,0 +1,32 @@ +======================== + Control access to Apps +======================== + +Installation +============ + +* `Install `__ this module in a usual way + +Configuration +============= + +After the installation of this module by default only *default admin* and *superuser* have access to installing modules. +To update the permission follow for other users follow the steps below. + + +* Open menu ``[[ Settings ]] >> Users & Companies >> Users``, select the user you want to grant the access to +* On ``Access Rights`` tab, ``Other`` settings group there is an ``Apps access`` security category + + * Select ``Allow installing apps`` - to allow apps installation from everywhere + * Select ``Allow installing apps only from settings`` - allow apps installation only from other module's ``Configuration >> Settings`` menu. More precisely, it just hides ``[[ Apps ]]`` menu + * Select blank line - to restrict application installation + +Usage +===== + +* Be sure that you don't test the functionality under the ``Administrator`` (superuser with id=1) user - he is immune to any access restriction except of hiding menus or buttons in UI +* If you don't select anything in ``Apps access``: there is no ``[[ Apps ]]`` menu - even if your user is in ``Administration: Settings`` security group. Also note that you + have no ability to include yourself in groups allowing to installing apps - this is what ``access_restricted`` module does (``access_apps`` depends on it) +* If you have ``Allow installing apps`` selected: there is ``[[ Apps ]]`` menu +* If you have ``Allow installing apps only from settings``: from other module's ``Configuration >> Settings`` menu, e.g. from ``[[ Website ]] >> Configuration >> Settings`` see that + you have the ability to check the ``Digital Content`` checkbox that actually installs the ``website_sale_digital`` module after clicking on ``[Apply]`` button. diff --git a/access_apps/hooks.py b/access_apps/hooks.py new file mode 100644 index 00000000..ed07b059 --- /dev/null +++ b/access_apps/hooks.py @@ -0,0 +1,7 @@ +# Copyright 2021,2023 Ivan Yelizariev +# License MIT (https://opensource.org/licenses/MIT). +def uninstall_hook(env): + access = env.ref( + "base.access_ir_module_module_group_user", raise_if_not_found=False + ) + access.write({"active": True}) diff --git a/access_apps/i18n/access_apps.pot b/access_apps/i18n/access_apps.pot new file mode 100644 index 00000000..053e5413 --- /dev/null +++ b/access_apps/i18n/access_apps.pot @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_apps +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: access_apps +#: model:res.groups,name:access_apps.group_allow_apps +msgid "Allow installing apps" +msgstr "" + +#. module: access_apps +#: model:res.groups,name:access_apps.group_allow_apps_only_from_settings +msgid "Allow installing apps only from settings" +msgstr "" + +#. module: access_apps +#: model:ir.module.category,name:access_apps.module_category_access_apps +msgid "Apps access" +msgstr "" + +#. module: access_apps +#: model:ir.model,name:access_apps.model_res_config_settings +msgid "Config Settings" +msgstr "" + diff --git a/access_apps/i18n/de.po b/access_apps/i18n/de.po new file mode 100644 index 00000000..22047c86 --- /dev/null +++ b/access_apps/i18n/de.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_apps +# +# Translators: +# Sergej Briesin <20bs18@gmail.com>, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2018-04-21 00:17+0000\n" +"Last-Translator: Sergej Briesin <20bs18@gmail.com>, 2018\n" +"Language-Team: German (https://www.transifex.com/it-projects-llc/teams/76080/" +"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: access_apps +#: model:res.groups,name:access_apps.group_allow_apps +#, fuzzy +msgid "Allow installing apps" +msgstr "Erlaube Apps zu installieren" + +#. module: access_apps +#: model:res.groups,name:access_apps.group_allow_apps_only_from_settings +#, fuzzy +msgid "Allow installing apps only from settings" +msgstr "Erlaube Apps nur vom Einstellungen zu installieren" + +#. module: access_apps +#: model:ir.module.category,name:access_apps.module_category_access_apps +msgid "Apps access" +msgstr "Apps Zugriff" + +#. module: access_apps +#: model:ir.model,name:access_apps.model_res_config_settings +msgid "Config Settings" +msgstr "" diff --git a/access_apps/i18n/es.po b/access_apps/i18n/es.po new file mode 100644 index 00000000..4cbda45e --- /dev/null +++ b/access_apps/i18n/es.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_apps +# +# Translators: +# charles paul requena palomino , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-26 19:17+0000\n" +"PO-Revision-Date: 2018-04-26 19:17+0000\n" +"Last-Translator: charles paul requena palomino , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/it-projects-llc/" +"teams/76080/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" + +#. module: access_apps +#: model:res.groups,name:access_apps.group_allow_apps +#, fuzzy +msgid "Allow installing apps" +msgstr "Permitir instalar aplicaciones solo desde la configuración" + +#. module: access_apps +#: model:res.groups,name:access_apps.group_allow_apps_only_from_settings +#, fuzzy +msgid "Allow installing apps only from settings" +msgstr "Permitir instalar aplicaciones solo desde la configuración" + +#. module: access_apps +#: model:ir.module.category,name:access_apps.module_category_access_apps +msgid "Apps access" +msgstr "Acceso a aplicaciones" + +#. module: access_apps +#: model:ir.model,name:access_apps.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#~ msgid "Access to Modules" +#~ msgstr "Acceso a los módulos" diff --git a/access_apps/i18n/es_CR.po b/access_apps/i18n/es_CR.po new file mode 100644 index 00000000..4722e88c --- /dev/null +++ b/access_apps/i18n/es_CR.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_apps +# +# Translators: +# Randall , 2018 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2017-11-28 13:02+0000\n" +"Last-Translator: Randall , 2018\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-" +"llc/teams/76080/es_CR/)\n" +"Language: es_CR\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: access_apps +#: model:res.groups,name:access_apps.group_allow_apps +#, fuzzy +msgid "Allow installing apps" +msgstr "Permitir instalar aplicaciones" + +#. module: access_apps +#: model:res.groups,name:access_apps.group_allow_apps_only_from_settings +msgid "Allow installing apps only from settings" +msgstr "Permitir instalar aplicaciones sólo desde ajustes" + +#. module: access_apps +#: model:ir.module.category,name:access_apps.module_category_access_apps +msgid "Apps access" +msgstr "Acceso aplicaciones" + +#. module: access_apps +#: model:ir.model,name:access_apps.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "res.config.settings" diff --git a/access_apps/images/banner.png b/access_apps/images/banner.png new file mode 100644 index 00000000..6569c1c8 Binary files /dev/null and b/access_apps/images/banner.png differ diff --git a/access_apps/models/__init__.py b/access_apps/models/__init__.py new file mode 100644 index 00000000..ab480f8b --- /dev/null +++ b/access_apps/models/__init__.py @@ -0,0 +1 @@ +from . import res_config diff --git a/access_apps/models/res_config.py b/access_apps/models/res_config.py new file mode 100644 index 00000000..ef28380b --- /dev/null +++ b/access_apps/models/res_config.py @@ -0,0 +1,70 @@ +# Copyright 2018 Ivan Yelizariev +# Copyright 2018 Ildar Nasyrov +# License MIT (https://opensource.org/licenses/MIT). + +from odoo import api, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + @api.model + def _install_modules(self, modules): + if self.env.user.has_group( + "access_apps.group_allow_apps_only_from_settings" + ): + self = self.sudo() + + return super(ResConfigSettings, self)._install_modules(modules) + + @api.model + def default_get(self, fields): + # We restricted any access to apps by default (`ir.module.module`) but in `website_sale` module configuration + # there is a field that gets its default value by searching in apps. + # Without this there is a possibility to encounter the `Access Error` when trying to open settings + # - e.g. when administrators without access to apps open ``[[ Website Admin ]] >> Configuration >> Settings`` + + # TODO: this solution may lead to unexpected result + # if some of default methods uses self self.env.user to compute default value + res = super(ResConfigSettings, self.sudo()).default_get(fields) + + # modules: which modules are installed/to install + classified = self._get_classified_fields() + for module in classified["to_uninstall"]: + name = f"module_{module.name}" + res[name] = module.state in ("installed", "to install", "to upgrade") + if self._fields[name].type == "selection": + res[name] = str(int(res[name])) + + return res + + @api.model + def _get_classified_fields(self, fnames=None): + # classify mudules to install and uninstall independently + res = super(ResConfigSettings, self)._get_classified_fields(fnames=fnames) + + to_uninstall = res["module"].filtered( + lambda m: not self[f"module_{m.name}"] + and m.state in ("installed", "to upgrade") + ) + + modules = res["module"] - to_uninstall + + res["module"] = modules + res["to_uninstall"] = to_uninstall + + return res + + def execute(self): + # base `exectute` doesn't know about new classification - it only has a list of modules to install now + res = super(ResConfigSettings, self).execute() + # uninstall modules if needed and a user has access + to_uninstall = self._get_classified_fields()["to_uninstall"] + if to_uninstall and self.env.user.has_group( + "access_apps.group_allow_apps_only_from_settings" + ): + to_uninstall_modules = self.env["ir.module.module"] + for module in to_uninstall: + to_uninstall_modules += module + to_uninstall_modules.sudo().button_immediate_uninstall() + return res diff --git a/access_apps/security/access_apps_security.xml b/access_apps/security/access_apps_security.xml new file mode 100644 index 00000000..e05f762d --- /dev/null +++ b/access_apps/security/access_apps_security.xml @@ -0,0 +1,32 @@ + + + + + + + + Apps access + 18 + + + Allow installing apps only from settings + + + + Allow installing apps + + + + + + + diff --git a/access_apps/security/ir.model.access.csv b/access_apps/security/ir.model.access.csv new file mode 100644 index 00000000..30770dd9 --- /dev/null +++ b/access_apps/security/ir.model.access.csv @@ -0,0 +1,6 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_ir_module_category_group_user","ir_module_category group_user","base.model_ir_module_category","group_allow_apps",1,0,0,0 +"access_ir_module_module_group_user","ir_module_module group_user","base.model_ir_module_module","group_allow_apps",1,1,1,1 +"access_ir_module_module_dependency_group_allow_apps","ir_module_module_dependency group_allow_apps","base.model_ir_module_module_dependency","group_allow_apps",1,1,1,1 +"access_ir_module_module_group_allow_apps_only_from_settings","ir_module_module_group_allow_apps_only_from_settings","base.model_ir_module_module","group_allow_apps_only_from_settings",1,1,0,0 +"access_ir_module_module_all_can_read","ir_module_module_all_can_read","base.model_ir_module_module","base.group_system",1,0,0,0 diff --git a/access_apps/static/description/icon.png b/access_apps/static/description/icon.png new file mode 100644 index 00000000..85f5fe74 Binary files /dev/null and b/access_apps/static/description/icon.png differ diff --git a/access_apps/tests/__init__.py b/access_apps/tests/__init__.py new file mode 100644 index 00000000..18849263 --- /dev/null +++ b/access_apps/tests/__init__.py @@ -0,0 +1 @@ +from . import test_access diff --git a/access_apps/tests/test_access.py b/access_apps/tests/test_access.py new file mode 100644 index 00000000..62544da7 --- /dev/null +++ b/access_apps/tests/test_access.py @@ -0,0 +1,64 @@ +# Copyright 2024 DOB +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.exceptions import AccessError +from odoo.tests import new_test_user +from odoo.tests.common import TransactionCase + + +class TestAccessApps(TransactionCase): + """Tests for access_apps: access control to the Apps section. + + Validates: Requirement 6.1 + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( + context=dict(cls.env.context, tracking_disable=True, no_reset_password=True) + ) + # Regular user without admin rights and without group_allow_apps + cls.regular_user = new_test_user( + cls.env, + name="Regular User", + login="test_regular_user_access_apps", + groups="base.group_user", + ) + + def test_non_admin_cannot_read_ir_module_module(self): + """WHEN a user without admin rights tries to access the Apps section, + access_apps SHALL deny access. + + Validates: Requirement 6.1 + """ + # The module deactivates base.access_ir_module_module_group_user, + # so only users in group_allow_apps can read ir.module.module. + # A regular user (not in group_allow_apps) should get AccessError. + with self.assertRaises(AccessError): + self.env["ir.module.module"].with_user(self.regular_user).search([]) + + def test_admin_can_read_ir_module_module(self): + """WHEN the admin user (in group_allow_apps) accesses the Apps section, + access_apps SHALL allow access. + + Validates: Requirement 6.1 (positive case) + """ + # Admin is in group_allow_apps by default (see security XML) + admin_user = self.env.ref("base.user_admin") + modules = self.env["ir.module.module"].with_user(admin_user).search([], limit=1) + # Should not raise; result may be empty or non-empty + self.assertIsNotNone(modules) + + def test_non_admin_not_in_group_allow_apps(self): + """WHEN a regular user is not in group_allow_apps, + they SHALL NOT have access to ir.module.module. + + Validates: Requirement 6.1 + """ + group_allow_apps = self.env.ref("access_apps.group_allow_apps") + self.assertNotIn( + self.regular_user, + group_allow_apps.users, + "Regular user should not be in group_allow_apps", + ) diff --git a/access_restricted/README.rst b/access_restricted/README.rst new file mode 100644 index 00000000..6c0c2667 --- /dev/null +++ b/access_restricted/README.rst @@ -0,0 +1,27 @@ +.. image:: https://itpp.dev/images/infinity-readme.png + :alt: Tested and maintained by IT Projects Labs + :target: https://itpp.dev + +Restricted administration rights +================================ + +The module makes impossible for administrator to set (and see) more access rights (groups) than he already has. +The only partial exception of this rule is made if you are already a member of the *Allow add implied groups from settings* security group. +Then you are allowed to escalate your privileges but just from ``Settings`` menus (by means of ``group_XXX`` boolean fields of ``res.config.settings`` models views). + +This doesn't affect superuser, of course. + +Typical usage of the module +=========================== + +The superuser creates an administrator user without access group "Show Apps Menu" (see **access_apps** module). Then the administrator has access to settings, but not able to install new apps (without this module he can add himself to "Show Apps Menu" and get access to apps). + +Roadmap +======= + +* Settings menu shows group fields are not updated without *Allow add implied groups from settings* (ok), but it shows the fields as not editable (not ok) + +Further information +=================== + +Tested on `Odoo 17.0 `_ diff --git a/access_restricted/__init__.py b/access_restricted/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/access_restricted/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/access_restricted/__manifest__.py b/access_restricted/__manifest__.py new file mode 100644 index 00000000..440e37e2 --- /dev/null +++ b/access_restricted/__manifest__.py @@ -0,0 +1,15 @@ +{ + "name": "Restricted administration rights", + "summary": "Apply strict restriction on what an admin can do", + "version": "19.0.1.3.5", + "author": "IT-Projects LLC, Ivan Yelizariev", + "category": "Extra Tools", + "images": ["images/banner.jpg"], + "support": "apps@itpp.dev", + "website": "https://twitter.com/OdooFree", + "license": "Other OSI approved licence", # MIT + "currency": "EUR", + "depends": ["ir_rule_protected"], + "data": ["security/access_restricted_security.xml"], + "installable": True, +} diff --git a/access_restricted/doc/changelog.rst b/access_restricted/doc/changelog.rst new file mode 100644 index 00000000..6b5e6f58 --- /dev/null +++ b/access_restricted/doc/changelog.rst @@ -0,0 +1,50 @@ +`1.3.5` +------- + +- **Fix:** Fixed possibility to write inappropriate groups directly via write method after some odoo updates https://github.com/odoo/odoo/commit/5f12e244f6e57b8edb56788147774150e2ae134d + +`1.3.4` +------- + +- **Fix:** Allow superuser to write groups via settings menu + +`1.3.3` +------- + +- **Fix:** If no permission to add groups then just ignore write operations to groups model records but apply any other valid settings. In other words - do not block rest of the settings from applying if there is only no permission to add groups + +`1.3.2` +------- + +- **Fix:** regardless of ``Allow add implied groups from settings`` always allow to uncheck **group_XXX** fields from settings menu. This makes possible for ``access_apps`` module to independently install apps from settings menu. Otherwise users of ``access_apps`` need always be in ``Allow add implied...`` to install from settings + +`1.3.1` +------- + +- **Fix:** a user, if he has ``Allow add implied groups from settings`` group access right, should be able to uncheck **group_XXX** fields from a settings menu to exit from implied groups (all other users that are in implying group also quit from the implied group) + +`1.3.0` +------- + +- [ADD] security group that allows increasing rights from settings menu (by checking ``res.config.settings`` 'group_XXX' boolean fields) + +`1.2.0` +------- + +- [REF] clean and simplify code + +`1.1.0` +------- + +- ADD: Make restricted groups readonly in Settigs pages (res.config.settings) +- ADD: don't restrict access to Technical Settings group + +`1.0.1` +------- + +- FIX: update to the latest odoo 9.0 version due to this comit from Mar 24, 2016 https://github.com/odoo/odoo/commit/40a299c580c4608edab8781fda4e66f39611543b + +`1.0.0` +------- + +- init version diff --git a/access_restricted/doc/index.rst b/access_restricted/doc/index.rst new file mode 100644 index 00000000..83c7761a --- /dev/null +++ b/access_restricted/doc/index.rst @@ -0,0 +1,37 @@ +================================== + Restricted administration rights +================================== + +Installation +============ + +* `Install `__ this module in a usual way + +Configuration +============= + + +* `Log in as SUPERUSER `__ +* Navigate to menu ``[[ Settings ]] >> Users & Companies >> Users`` +* In ``Access Rights`` tab you can select *Allow add implied groups from settings*: + it allows a user to configure groups via ``group_XXX`` fields from ``Settings`` menu. + +Usage +===== + +By default all users except a superuser restricted to escalate the privileges. + +Let's take ``Sales (sale_management)`` module as an example. + +Without this module installed: + +* Say you have a user with administration rights ``Administration: Access Rights``. This user thus may increase his own rights in ``Application Accesses`` from ``Sales: User: Own Documents Only`` + to ``Sales: Administrator``. Also he can open menu ``[[ Sales ]] >> Configuration >> Settings`` and select ``Customer Addresses`` there + and then click ``[Apply]`` button (adding ``group_sale_delivery_address``) + +With this module installed: + +* The user from previous example cannot increase his privileges. There is no ``Sales: Manager`` option for him, and also no ``Customer Addresses`` + option in module configuration +* The only exception is done for users who are in special group *Allow add implied groups from settings*: if your user is included in this group by the superuser then you may select + ``Customer Addresses`` from ``Sale`` module ``Configuration >> Settings`` menu diff --git a/access_restricted/i18n/access_restricted.pot b/access_restricted/i18n/access_restricted.pot new file mode 100644 index 00000000..34357bc9 --- /dev/null +++ b/access_restricted/i18n/access_restricted.pot @@ -0,0 +1,94 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_restricted +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: access_restricted +#: code:addons/access_restricted/models/res_config_settings.py:48 +#, python-format +msgid "\n" +"\n" +"You don't have access to change this settings, because you administration rights are restricted" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: access_restricted +#: model:res.groups,name:access_restricted.group_allow_add_implied_from_settings +msgid "Allow add implied groups from settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_uid +msgid "Created by" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_date +msgid "Created on" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__group_private_addresses +msgid "Group Private Addresses" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__id +msgid "ID" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_date +msgid "Last Updated on" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_users +msgid "Users" +msgstr "" + +#. module: access_restricted +#: code:addons/access_restricted/models/res_users.py:95 +#, python-format +msgid "You cannot add groups to Implied groups, because you are not allowed to increase your rights. Please contact your system administrator." +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_test_config_settings +msgid "test.config.settings" +msgstr "" + diff --git a/access_restricted/i18n/de.po b/access_restricted/i18n/de.po new file mode 100644 index 00000000..f285d17c --- /dev/null +++ b/access_restricted/i18n/de.po @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_restricted +# +# Translators: +# Sergej Briesin <20bs18@gmail.com>, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2018-04-21 00:17+0000\n" +"Last-Translator: Sergej Briesin <20bs18@gmail.com>, 2018\n" +"Language-Team: German (https://www.transifex.com/it-projects-llc/teams/76080/" +"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: access_restricted +#: code:addons/access_restricted/models/res_config_settings.py:48 +#, python-format +msgid "" +"\n" +"\n" +"You don't have access to change this settings, because you administration " +"rights are restricted" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: access_restricted +#: model:res.groups,name:access_restricted.group_allow_add_implied_from_settings +msgid "Allow add implied groups from settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_uid +msgid "Created by" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_date +msgid "Created on" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__group_private_addresses +msgid "Group Private Addresses" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__id +msgid "ID" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_date +msgid "Last Updated on" +msgstr "" + +#. module: access_restricted +#: code:addons/access_restricted/models/res_users.py:95 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_users +msgid "Users" +msgstr "Nutzer" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_test_config_settings +msgid "test.config.settings" +msgstr "" diff --git a/access_restricted/i18n/es.po b/access_restricted/i18n/es.po new file mode 100644 index 00000000..602e63aa --- /dev/null +++ b/access_restricted/i18n/es.po @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_restricted +# +# Translators: +# charles paul requena palomino , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-26 19:17+0000\n" +"PO-Revision-Date: 2018-04-26 19:17+0000\n" +"Last-Translator: charles paul requena palomino , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/it-projects-llc/" +"teams/76080/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" + +#. module: access_restricted +#: code:addons/access_restricted/models/res_config_settings.py:48 +#, python-format +msgid "" +"\n" +"\n" +"You don't have access to change this settings, because you administration " +"rights are restricted" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_groups +msgid "Access Groups" +msgstr "Grupos de acceso" + +#. module: access_restricted +#: model:res.groups,name:access_restricted.group_allow_add_implied_from_settings +msgid "Allow add implied groups from settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__display_name +msgid "Display Name" +msgstr "Nombre para mostrar" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__group_private_addresses +msgid "Group Private Addresses" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__id +msgid "ID" +msgstr "ID" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_date +msgid "Last Updated on" +msgstr "Ultima actualizacion en" + +#. module: access_restricted +#: code:addons/access_restricted/models/res_users.py:95 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_users +msgid "Users" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_test_config_settings +msgid "test.config.settings" +msgstr "" diff --git a/access_restricted/i18n/es_CR.po b/access_restricted/i18n/es_CR.po new file mode 100644 index 00000000..8bfd3e9d --- /dev/null +++ b/access_restricted/i18n/es_CR.po @@ -0,0 +1,114 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_restricted +# +# Translators: +# Randall , 2018 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2017-11-28 13:02+0000\n" +"Last-Translator: Randall , 2018\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-" +"llc/teams/76080/es_CR/)\n" +"Language: es_CR\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: access_restricted +#: code:addons/access_restricted/models/res_config_settings.py:48 +#, python-format +msgid "" +"\n" +"\n" +"You don't have access to change this settings, because you administration " +"rights are restricted" +msgstr "" +"\n" +"\n" +"No tiene acceso para cambiar esta configuración, ya que los derechos de " +"administración están restringidos." + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_groups +msgid "Access Groups" +msgstr "Grupos de Accesos" + +#. module: access_restricted +#: model:res.groups,name:access_restricted.group_allow_add_implied_from_settings +msgid "Allow add implied groups from settings" +msgstr "Permitir agregar grupos implícitos desde la configuración" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_config_settings +#, fuzzy +msgid "Config Settings" +msgstr "res.config.settings" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__group_private_addresses +msgid "Group Private Addresses" +msgstr "" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__id +msgid "ID" +msgstr "ID" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: access_restricted +#: model:ir.model.fields,field_description:access_restricted.field_test_config_settings__write_date +msgid "Last Updated on" +msgstr "Última actualización en " + +#. module: access_restricted +#: code:addons/access_restricted/models/res_users.py:95 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_res_users +msgid "Users" +msgstr "Usuarios" + +#. module: access_restricted +#: model:ir.model,name:access_restricted.model_test_config_settings +msgid "test.config.settings" +msgstr "test.config.settings" + +#~ msgid "Group User" +#~ msgstr "Grupos de Usuario" diff --git a/access_restricted/images/banner.jpg b/access_restricted/images/banner.jpg new file mode 100644 index 00000000..99558f6f Binary files /dev/null and b/access_restricted/images/banner.jpg differ diff --git a/access_restricted/models/__init__.py b/access_restricted/models/__init__.py new file mode 100644 index 00000000..42098d2c --- /dev/null +++ b/access_restricted/models/__init__.py @@ -0,0 +1,3 @@ +from . import res_config_settings +from . import res_users +from . import test_config_settings diff --git a/access_restricted/models/res_config_settings.py b/access_restricted/models/res_config_settings.py new file mode 100644 index 00000000..36b7f694 --- /dev/null +++ b/access_restricted/models/res_config_settings.py @@ -0,0 +1,71 @@ +from odoo import SUPERUSER_ID, api, models +from odoo.tools import ustr +from odoo.tools.translate import _ + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + @api.model + def _get_classified_fields(self, fnames=None): + uid = self.env.uid + classified = super()._get_classified_fields(fnames) + config = self.env.context.get("config") + is_execute_stage = config and isinstance(config, models.Model) + + if uid == SUPERUSER_ID or is_execute_stage: + return classified + + group = [] + user = self.env.user + + for name, groups, implied_group in classified["group"]: + if ( + implied_group in user.group_ids + or user.has_group( + "access_restricted.group_allow_add_implied_from_settings" + ) + ): + group.append((name, groups, implied_group)) + + classified["group"] = group + return classified + + @api.model + def fields_get(self, allfields=None, **kwargs): + uid = self.env.uid + fields = super().fields_get(allfields, **kwargs) + + if uid == SUPERUSER_ID: + return fields + + user = self.env.user + + for name in fields: + if not name.startswith("group_"): + continue + + f = self._fields[name] + + if ( + f.implied_group in user.group_ids + or user.has_group( + "access_restricted.group_allow_add_implied_from_settings" + ) + ): + continue + + fields[name].update( + readonly=True, + help=ustr(fields[name].get("help", "")) + + _( + "\n\nYou don't have access to change this settings, because your administration rights are restricted" + ), + ) + + return fields + + def execute(self): + return super( + ResConfigSettings, self.with_context({"config": self}) + ).execute() diff --git a/access_restricted/models/res_users.py b/access_restricted/models/res_users.py new file mode 100644 index 00000000..8b185c41 --- /dev/null +++ b/access_restricted/models/res_users.py @@ -0,0 +1,112 @@ +from odoo import SUPERUSER_ID, _, api, models +from odoo.exceptions import AccessError + +IR_CONFIG_NAME = "access_restricted.fields_view_get_uid" + + +class ResUsers(models.Model): + _inherit = "res.users" + + @api.model + def get_views(self, views, options=None): + last_uid = self.env["ir.config_parameter"].sudo().get_param(IR_CONFIG_NAME) + if int(last_uid) != self.env.uid: + self.env["res.groups"]._update_user_groups_view() + return super().get_views(views, options) + + def write(self, vals): + if 'groups_id' in vals: + self.env["ir.config_parameter"].sudo().set_param(IR_CONFIG_NAME, "0") + return super().write(vals) + + +class ResGroups(models.Model): + _inherit = "res.groups" + + @api.model + def _update_user_groups_view(self): + real_uid = self.env.uid + self.env["ir.config_parameter"].sudo().set_param(IR_CONFIG_NAME, real_uid) + self.env.flush_all() + + @api.model + def get_application_groups(self, domain=None): + if domain is None: + domain = [] + domain.append(("share", "=", False)) + + real_uid = int( + self.env["ir.config_parameter"].sudo().get_param(IR_CONFIG_NAME, "0") + ) + if real_uid and real_uid != SUPERUSER_ID: + group_no_one_id = self.env.ref("base.group_no_one").id + domain = domain + [ + "|", + ("user_ids", "in", [real_uid]), + ("id", "=", group_no_one_id), + ] + return self.sudo().search(domain) + + def write(self, vals): + config = self.env.context.get("config") + + # `isinstance` check is a non-xmplrpc proof. + if config and isinstance(config, models.Model): + implied_ids = vals.get("implied_ids") + classified_group = config._get_classified_fields()["group"] + # when `res.config.settings`'s `execute` method writes the `users` field to group, + # it is always to remove users and the `users` field is the only key in the write dict + users = vals.get("user_ids") + implied_group = implied_ids and implied_ids[0][1] + users_exclude_operation = ( + users and len(vals) == 1 and all(u[0] == 3 for u in users) + ) + # ``all(u[0] == 3 for u in users)`` is to be sure that all operations are for removing. + # `(3, id)` tuple removes the record from the set (the Many2many field `users`) + add_implied_group_operation = implied_group in [ + group[2].id for group in classified_group + ] + curr_user_allowed = self.env.user._is_superuser() or self.env.user.has_group( + "access_restricted.group_allow_add_implied_from_settings" + ) + if ( + users_exclude_operation + or add_implied_group_operation + and curr_user_allowed + ): + self = self.with_user(SUPERUSER_ID) + else: + # do nothing with groups if there is no permission to add from settings + return + + # in the https://github.com/odoo/odoo/commit/5f12e244f6e57b8edb56788147774150e2ae134d commit + # the method was refactored due to a higher performance. + # Super method lacks of orm part so as consequent ir rules are not checked and we check its conditions manually. + # We apply super method and check the difference of implied groups, + # if the not proper group was set error is raised + check_for_implied_ids = ( + "implied_ids" in vals + and vals["implied_ids"] + and self.env.user.id != SUPERUSER_ID + ) + if check_for_implied_ids: + implied_ids_before = self.mapped("implied_ids") + groups_before = self.env.user.group_ids + + result = super(ResGroups, self).write(vals) + + if check_for_implied_ids: + implied_ids_after = self.mapped("implied_ids") + group_no_one = self.env.ref("base.group_no_one") + implied_group_ids = implied_ids_after - implied_ids_before - group_no_one + + # R1 <= R2 True if all records of R1 are also in R2 + if not implied_group_ids <= groups_before: + raise AccessError( + _( + "You cannot add groups to Implied groups, because you are not allowed to increase your rights. " + "Please contact your system administrator." + ) + ) + + return result diff --git a/access_restricted/models/test_config_settings.py b/access_restricted/models/test_config_settings.py new file mode 100644 index 00000000..70a5ec7f --- /dev/null +++ b/access_restricted/models/test_config_settings.py @@ -0,0 +1,13 @@ +from odoo import fields, models + + +class TestConfigSettings(models.TransientModel): + + _description = "Test config settings" + _inherit = ["res.config.settings"] + + group_test_access_restricted = fields.Boolean( + group="base.group_system", + # random group for test purposes + implied_group="base.group_multi_currency", + ) diff --git a/access_restricted/security/access_restricted_security.xml b/access_restricted/security/access_restricted_security.xml new file mode 100644 index 00000000..aeff89c6 --- /dev/null +++ b/access_restricted/security/access_restricted_security.xml @@ -0,0 +1,30 @@ + + + + Allow add implied groups from settings + + + Only admin can edit admin + + + [('id', '!=', 1)] + + + + + + + + res.groups.restricted + + + + + + + + + diff --git a/access_restricted/static/description/icon.png b/access_restricted/static/description/icon.png new file mode 100644 index 00000000..85f5fe74 Binary files /dev/null and b/access_restricted/static/description/icon.png differ diff --git a/access_restricted/tests/__init__.py b/access_restricted/tests/__init__.py new file mode 100644 index 00000000..177eccaa --- /dev/null +++ b/access_restricted/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_fields_view_get +from . import test_fields_get +from . import test_allow_implied diff --git a/access_restricted/tests/test_allow_implied.py b/access_restricted/tests/test_allow_implied.py new file mode 100644 index 00000000..969d2c41 --- /dev/null +++ b/access_restricted/tests/test_allow_implied.py @@ -0,0 +1,86 @@ +from odoo.exceptions import AccessError +from odoo.tests.common import TransactionCase + +GROUP = "base.group_multi_currency" + + +class TestAllowImplied(TransactionCase): + def _get_classified_groups(self, config): + groups = config._get_classified_fields()["group"] + return [g[0] for g in groups] + + def setUp(self): + super().setUp() + self.group = self.env.ref(GROUP) + self.demo_user = self.env["res.users"].create({ + "name": "Test Demo User", + "login": "test_demo_allow_implied", + "groups_id": [(6, 0, [self.env.ref("base.group_user").id])], + }) + + def test_base(self): + demo_user = self.demo_user + + group_system = self.env.ref("base.group_system") + + demo_user.write({"group_ids": [(3, self.group.id)]}) + self.group.write({"users": [(3, demo_user.id)]}) + self.assertFalse(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + + demo_user.write({"group_ids": [(4, group_system.id)]}) + + test_config_settings = ( + self.env["res.config.settings"] + .with_user(demo_user.id) + .create({"group_test_access_restricted": True}) + ) + self.assertFalse(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + + # check that the field is readonly + self.assertTrue( + test_config_settings.fields_get()["group_test_access_restricted"][ + "readonly" + ] + ) + # check that test group hasn't got appended to classified + self.assertNotIn( + "self.group", self._get_classified_groups(test_config_settings) + ) + + group_allow = self.env.ref( + "access_restricted.group_allow_add_implied_from_settings" + ) + demo_user.write({"group_ids": [(4, group_allow.id)]}) + + # check that now the field is not readonly + self.assertFalse( + test_config_settings.fields_get()["group_test_access_restricted"][ + "readonly" + ] + ) + # check that now the group is in classified + self.assertIn( + "group_test_access_restricted", + self._get_classified_groups(test_config_settings), + ) + + self.assertFalse(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + test_config_settings.with_user(demo_user.id).execute() + self.assertTrue(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + + def test_assert_raises(self): + demo_user = self.demo_user + group_system = self.env.ref("base.group_system") + + demo_user.write({"group_ids": [(3, self.group.id)]}) + self.group.write({"users": [(3, demo_user.id)]}) + self.assertFalse(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + + demo_user.write({"group_ids": [(4, group_system.id)]}) + self.assertFalse(self.env["res.users"].with_user(demo_user.id).has_group(GROUP)) + + # check that there is no access to put test group into implied_ids anyways + with self.assertRaises(AccessError): + group_system.with_user(demo_user.id).write( + {"implied_ids": [(4, self.group.id)]} + ) diff --git a/access_restricted/tests/test_fields_get.py b/access_restricted/tests/test_fields_get.py new file mode 100644 index 00000000..47b9b1e8 --- /dev/null +++ b/access_restricted/tests/test_fields_get.py @@ -0,0 +1,39 @@ +from odoo.tests.common import TransactionCase + + +def _sel_groups_field_name(group_ids): + """Generate sel_groups field name from group ids (replaces removed name_selection_groups).""" + return 'sel_groups_' + '_'.join(str(i) for i in sorted(group_ids)) + + +class TestFieldsGet(TransactionCase): + def test_base(self): + demo_user = self.env["res.users"].create({ + "name": "Test Demo User Fields", + "login": "test_demo_fields_get", + "groups_id": [(6, 0, [self.env.ref("base.group_user").id])], + }) + group_erp_manager = self.env.ref("base.group_erp_manager") + group_system = self.env.ref("base.group_system") + + demo_user.write({"group_ids": [(3, group_system.id)]}) + group_system.write({"user_ids": [(3, demo_user.id)]}) + demo_user.write({"group_ids": [(4, group_erp_manager.id)]}) + + view_users_form = self.env.ref("base.view_users_form") + ( + self.env["res.users"] + .with_user(demo_user) + .with_context({"uid": demo_user.id}) + .get_views([[view_users_form.id, "form"]]) + ) + + sel_groups = _sel_groups_field_name([group_erp_manager.id]) + res = self.env["res.users"].with_user(demo_user).fields_get() + self.assertTrue(res.get(sel_groups)) + + demo_user.write({"groups_id": [(4, group_system.id)]}) + + sel_groups = _sel_groups_field_name([group_erp_manager.id, group_system.id]) + res = self.env["res.users"].with_user(demo_user).fields_get() + self.assertTrue(res.get(sel_groups)) diff --git a/access_restricted/tests/test_fields_view_get.py b/access_restricted/tests/test_fields_view_get.py new file mode 100644 index 00000000..15f1cad0 --- /dev/null +++ b/access_restricted/tests/test_fields_view_get.py @@ -0,0 +1,71 @@ +from odoo.tests.common import TransactionCase, tagged + +IR_CONFIG_NAME = "access_restricted.fields_view_get_uid" + + +@tagged("post_install", "-at_install") +class TestFieldsViewGet(TransactionCase): + def clear_config(self): + self.env["ir.config_parameter"].search([("key", "=", IR_CONFIG_NAME)]).unlink() + + def clear_access(self, user): + user.write( + { + "group_ids": [ + (3, self.env.ref("base.group_erp_manager").id, 0), + (3, self.env.ref("base.group_system").id, 0), + ] + } + ) + + def add_access(self, user, group_xmlid): + user.write({"group_ids": [(4, self.env.ref(group_xmlid).id, 0)]}) + + def _view_form(self, user, view_xmlid): + view_id = self.env.ref(view_xmlid).id + # context = {'lang': "en_US", 'tz': "Europe/Brussels", 'uid': user.id} + self.env["res.users"].with_user(user.id).get_view(view_id=view_id) + + def view_preference_form(self, user): + self._view_form(user, "base.view_users_form_simple_modif") + + def view_user_form(self, user): + self._view_form(user, "base.view_users_form") + + def view_form_all(self, user): + self.view_preference_form(user) + self.clear_config() + + self.view_user_form(user) + self.clear_config() + + def view_form_mix(self, user1, user2): + self.view_preference_form(user1) + self.view_user_form(user2) + + self.view_preference_form(user1) + self.view_preference_form(user2) + + self.view_form_all(user1) + self.view_user_form(user2) + + def test_base(self): + admin = self.env.ref("base.user_root") + demo = self.env.ref("base.user_demo") + + # test for admin + self.view_form_all(admin) + + # demo doesn't have admin rights + self.clear_access(demo) + self.view_preference_form(demo) + + # demo has "Access Rights" + self.add_access(demo, "base.group_erp_manager") + self.view_form_all(demo) + + # demo has "Settings" + self.add_access(demo, "base.group_system") + self.view_form_all(demo) + + self.view_form_mix(admin, demo) diff --git a/access_settings_menu/README.rst b/access_settings_menu/README.rst new file mode 100644 index 00000000..ea4067f0 --- /dev/null +++ b/access_settings_menu/README.rst @@ -0,0 +1,18 @@ +.. image:: https://itpp.dev/images/infinity-readme.png + :alt: Tested and maintained by IT Projects Labs + :target: https://itpp.dev + +Show settings menu for non-admin +================================ + +Adds "Show Settings Menu" checkbox in user's access rights tab. + +Uninstallation +============== + +After uninstalling, you need to update ``base`` module to return restriction to ``Settings`` menu back. + +Further information +=================== + +Tested on `Odoo 17.0 `_ diff --git a/access_settings_menu/__init__.py b/access_settings_menu/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/access_settings_menu/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/access_settings_menu/__manifest__.py b/access_settings_menu/__manifest__.py new file mode 100644 index 00000000..772280b5 --- /dev/null +++ b/access_settings_menu/__manifest__.py @@ -0,0 +1,15 @@ +{ + "name": "Show settings menu for non-admin", + "summary": """Allows to make Settings menu visible for non-admins""", + "version": "19.0.2.0.0", + "author": "IT-Projects LLC, Ivan Yelizariev", + "category": "Extra Tools", + "images": ["images/banner.png"], + "support": "apps@itpp.dev", + "website": "https://twitter.com/OdooFree", + "license": "Other OSI approved licence", # MIT + "depends": ["access_restricted"], + "data": ["security/access_settings_menu_security.xml"], + "demo": ["security/access_settings_menu_security_demo.xml"], + "installable": True, +} diff --git a/access_settings_menu/doc/changelog.rst b/access_settings_menu/doc/changelog.rst new file mode 100644 index 00000000..fa37a7e6 --- /dev/null +++ b/access_settings_menu/doc/changelog.rst @@ -0,0 +1,20 @@ +`2.0.0` +------- + +- Improvement: replace `access_apps` dependency with `access_restricted` since only the latter one is needed + +`1.0.2` +------- + +- FIX: make compatible with CI-tests of other modules + + +`1.0.1` +------- + +- FIX issue occured when user has ``[x] Show Settings Menu`` access, but doesn't have administration rights + +`1.0.0` +------- + +- Init version diff --git a/access_settings_menu/doc/index.rst b/access_settings_menu/doc/index.rst new file mode 100644 index 00000000..ea69bcca --- /dev/null +++ b/access_settings_menu/doc/index.rst @@ -0,0 +1,33 @@ +====================== + Access settings menu +====================== + +Installation +============ + +* `Install `__ this module in a usual way + +Configuration +============= + +* Open menu ``[[ Settings ]] >> Users & Companies >> Users`` +* Open user form view (click on the line with the user) +* Click ``[Edit]`` +* Select ``[Show Settings Menu]`` and click ``[Save]`` + +Usage +===== + +Without this module installed: + +* Non-admin user can't see the ``[[ Settings ]]`` menu. + + +With this module installed: + +* If non-admin user has the ``[Show Settings Menu]`` right he can see the ``[[ Settings ]]`` menu. + +Uninstallation +============== + +After uninstalling, you need to update ``base`` module to return restriction to ``Settings`` menu back. diff --git a/access_settings_menu/i18n/access_settings_menu.pot b/access_settings_menu/i18n/access_settings_menu.pot new file mode 100644 index 00000000..9b10824d --- /dev/null +++ b/access_settings_menu/i18n/access_settings_menu.pot @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_settings_menu +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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: access_settings_menu +#: model:res.groups,name:access_settings_menu.group_show_settings_menu +msgid "Show Settings Menu" +msgstr "" + +#. module: access_settings_menu +#: model:ir.model,name:access_settings_menu.model_res_users +msgid "Users" +msgstr "" + diff --git a/access_settings_menu/i18n/de.po b/access_settings_menu/i18n/de.po new file mode 100644 index 00000000..46fe065a --- /dev/null +++ b/access_settings_menu/i18n/de.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_settings_menu +# +# Translators: +# Sergej Briesin <20bs18@gmail.com>, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2018-04-21 00:17+0000\n" +"Last-Translator: Sergej Briesin <20bs18@gmail.com>, 2018\n" +"Language-Team: German (https://www.transifex.com/it-projects-llc/teams/76080/" +"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: access_settings_menu +#: model:res.groups,name:access_settings_menu.group_show_settings_menu +msgid "Show Settings Menu" +msgstr "Einstellungsmenü anzeigen" + +#. module: access_settings_menu +#: model:ir.model,name:access_settings_menu.model_res_users +msgid "Users" +msgstr "Nutzer" diff --git a/access_settings_menu/i18n/es_CR.po b/access_settings_menu/i18n/es_CR.po new file mode 100644 index 00000000..9c9db52a --- /dev/null +++ b/access_settings_menu/i18n/es_CR.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * access_settings_menu +# +# Translators: +# Randall , 2018 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2017-11-28 13:02+0000\n" +"Last-Translator: Randall , 2018\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-" +"llc/teams/76080/es_CR/)\n" +"Language: es_CR\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: access_settings_menu +#: model:res.groups,name:access_settings_menu.group_show_settings_menu +msgid "Show Settings Menu" +msgstr "Mostrar Menu de Ajustes" + +#. module: access_settings_menu +#: model:ir.model,name:access_settings_menu.model_res_users +msgid "Users" +msgstr "Usuarios" diff --git a/access_settings_menu/images/banner.png b/access_settings_menu/images/banner.png new file mode 100644 index 00000000..f499446e Binary files /dev/null and b/access_settings_menu/images/banner.png differ diff --git a/access_settings_menu/models.py b/access_settings_menu/models.py new file mode 100644 index 00000000..7a2d4ddb --- /dev/null +++ b/access_settings_menu/models.py @@ -0,0 +1,10 @@ +from odoo import api, models + + +class ResUsers(models.Model): + _inherit = "res.users" + + @api.model + def fields_get(self, *args, **kwargs): + # switch to superuser to get access to virtual fields + return super(ResUsers, self.sudo()).fields_get(*args, **kwargs) diff --git a/access_settings_menu/security/access_settings_menu_security.xml b/access_settings_menu/security/access_settings_menu_security.xml new file mode 100644 index 00000000..971f829b --- /dev/null +++ b/access_settings_menu/security/access_settings_menu_security.xml @@ -0,0 +1,20 @@ + + + + + Show Settings Menu + + + + + + + + + diff --git a/access_settings_menu/security/access_settings_menu_security_demo.xml b/access_settings_menu/security/access_settings_menu_security_demo.xml new file mode 100644 index 00000000..cb3b011d --- /dev/null +++ b/access_settings_menu/security/access_settings_menu_security_demo.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/access_settings_menu/static/description/icon.png b/access_settings_menu/static/description/icon.png new file mode 100644 index 00000000..85f5fe74 Binary files /dev/null and b/access_settings_menu/static/description/icon.png differ diff --git a/access_settings_menu/tests/__init__.py b/access_settings_menu/tests/__init__.py new file mode 100644 index 00000000..cc74d794 --- /dev/null +++ b/access_settings_menu/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fields_view_get diff --git a/access_settings_menu/tests/test_fields_view_get.py b/access_settings_menu/tests/test_fields_view_get.py new file mode 100644 index 00000000..9d5b68da --- /dev/null +++ b/access_settings_menu/tests/test_fields_view_get.py @@ -0,0 +1,20 @@ +from odoo.tests import common + +from odoo.addons.access_restricted.tests.test_fields_view_get import ( + TestFieldsViewGet as TestFieldsViewGetBase, +) + + +@common.tagged("post_install", "-at_install") +class TestFieldsViewGet(TestFieldsViewGetBase): + def test_access_settings_menu(self): + admin = self.env.ref("base.user_root") + demo = self.env.ref("base.user_demo") + + # demo doesn't have admin rights, but has "Show Settings Menu" + self.clear_access(demo) + self.add_access(demo, "access_settings_menu.group_show_settings_menu") + self.view_form_all(demo) + self.view_form_mix(admin, demo) + self.clear_config() + self.view_form_mix(demo, admin) diff --git a/account_bank_statement_1c_import/__init__.py b/account_bank_statement_1c_import/__init__.py new file mode 100644 index 00000000..12a4cc22 --- /dev/null +++ b/account_bank_statement_1c_import/__init__.py @@ -0,0 +1,2 @@ +from . import wizard +from . import models \ No newline at end of file diff --git a/account_bank_statement_1c_import/__manifest__.py b/account_bank_statement_1c_import/__manifest__.py new file mode 100644 index 00000000..a9c9ad55 --- /dev/null +++ b/account_bank_statement_1c_import/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': 'Account Bank Statement 1C Import', + 'category': 'Accounting', + 'version': '19.0.0.1', + 'author': 'MK.Lab', + 'website': 'https://inf-centre.ru/', + 'depends': [ + 'account', + 'l10n_ru_doc', + ], + 'data': [ + 'security/ir.model.access.csv', + 'wizard/invoice_import_wizard.xml', + 'views/account_journal_wizard_action.xml', + 'views/account_journal_dashboard_inherit.xml', + 'views/account_journal_settings.xml', + ], + 'installable': True, +} diff --git a/account_bank_statement_1c_import/i18n/ru.po b/account_bank_statement_1c_import/i18n/ru.po new file mode 100644 index 00000000..b1e87ed4 --- /dev/null +++ b/account_bank_statement_1c_import/i18n/ru.po @@ -0,0 +1,160 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_bank_statement_1c_import +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-18 22:00+0000\n" +"PO-Revision-Date: 2024-03-18 22:00+0000\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: account_bank_statement_1c_import +#: model:ir.model,name:account_bank_statement_1c_import.model_account_bank_statement +msgid "Bank Statement" +msgstr "Банковская выписка" + +#. module: account_bank_statement_1c_import +#: model_terms:ir.ui.view,arch_db:account_bank_statement_1c_import.view_invoice_import_wizard_form +msgid "Cancel" +msgstr "Отменить" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_account_bank_statement__date_from +msgid "Date From" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Error Import: %s" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__file +msgid "File" +msgstr "Файл" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__file_name +msgid "File Name" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__id +msgid "ID" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model_terms:ir.ui.view,arch_db:account_bank_statement_1c_import.view_invoice_import_wizard_form +msgid "Import" +msgstr "Импортировать" + +#. module: account_bank_statement_1c_import +#: model:ir.actions.act_window,name:account_bank_statement_1c_import.action_invoice_import_wizard +#: model:ir.model,name:account_bank_statement_1c_import.model_invoice_import_wizard +#: model:ir.ui.menu,name:account_bank_statement_1c_import.menu_invoice_import +#: model_terms:ir.ui.view,arch_db:account_bank_statement_1c_import.account_journal_dashboard_inherit +#: model_terms:ir.ui.view,arch_db:account_bank_statement_1c_import.view_invoice_import_wizard_form +msgid "Import Invoice" +msgstr "Импортировать выписку" + +#. module: account_bank_statement_1c_import +#: model:ir.actions.server,name:account_bank_statement_1c_import.action_import_invoice_wizard +msgid "Import Invoice Wizard" +msgstr "Импорт выписки" + +#. module: account_bank_statement_1c_import +#: model:ir.model,name:account_bank_statement_1c_import.model_account_journal +msgid "Journal" +msgstr "Журнал" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_invoice_import_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Only TXT files are allowed." +msgstr "Разрешены только файлы TXT" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Please upload the file." +msgstr "Пожалуйста, загрузите файл" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Statement not found for journal {} on date {}." +msgstr "Не найдено выписки по журналу {} и дате {}" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Suitable journal not found." +msgstr "" +"Подходящий журнал не найден. Проверьте стоит ли галочка 'Использовать в " +"банковской выписке' в журнале" + +#. module: account_bank_statement_1c_import +#: model:ir.model.fields,field_description:account_bank_statement_1c_import.field_account_journal__use_in_bank_statement +msgid "Use in Bank Statement" +msgstr "Использовать в банковской выписке" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "inn your company not found." +msgstr "" +"ИНН вашей компании не найден в файле. Пожалуйста, проверьте корректность " +"файла." + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Выписка успешно импортирована." +msgstr "" + +#. module: account_bank_statement_1c_import +#. odoo-python +#: code:addons/account_bank_statement_1c_import/wizard/invoice_import_wizard.py:0 +#, python-format +msgid "Импорт завершен" +msgstr "" diff --git a/account_bank_statement_1c_import/models/__init__.py b/account_bank_statement_1c_import/models/__init__.py new file mode 100644 index 00000000..2d921e48 --- /dev/null +++ b/account_bank_statement_1c_import/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_journal +from . import account_bank_statement \ No newline at end of file diff --git a/account_bank_statement_1c_import/models/account_bank_statement.py b/account_bank_statement_1c_import/models/account_bank_statement.py new file mode 100644 index 00000000..003f6976 --- /dev/null +++ b/account_bank_statement_1c_import/models/account_bank_statement.py @@ -0,0 +1,6 @@ +from odoo import models, fields + +class AccountBankStatement(models.Model): + _inherit = 'account.bank.statement' + + date_from = fields.Date(string="Date From") \ No newline at end of file diff --git a/account_bank_statement_1c_import/models/account_journal.py b/account_bank_statement_1c_import/models/account_journal.py new file mode 100644 index 00000000..1c3ac0db --- /dev/null +++ b/account_bank_statement_1c_import/models/account_journal.py @@ -0,0 +1,6 @@ +from odoo import models, fields + +class AccountJournal(models.Model): + _inherit = 'account.journal' + + use_in_bank_statement = fields.Boolean(string="Use in Bank Statement") \ No newline at end of file diff --git a/account_bank_statement_1c_import/security/ir.model.access.csv b/account_bank_statement_1c_import/security/ir.model.access.csv new file mode 100644 index 00000000..ea2df933 --- /dev/null +++ b/account_bank_statement_1c_import/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_invoice_import_wizard,access_invoice_import_wizard,model_invoice_import_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/account_bank_statement_1c_import/tests/__init__.py b/account_bank_statement_1c_import/tests/__init__.py new file mode 100644 index 00000000..8f010a0a --- /dev/null +++ b/account_bank_statement_1c_import/tests/__init__.py @@ -0,0 +1 @@ +from . import test_parser diff --git a/account_bank_statement_1c_import/tests/test_parser.py b/account_bank_statement_1c_import/tests/test_parser.py new file mode 100644 index 00000000..aebc82f8 --- /dev/null +++ b/account_bank_statement_1c_import/tests/test_parser.py @@ -0,0 +1,293 @@ +""" +Tests for Parser_1C (account_bank_statement_1c_import). + +Validates: Requirements 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.9 +""" +import base64 + +from odoo.exceptions import UserError +from odoo.tests.common import TransactionCase + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +COMPANY_INN = "7700000001" +COMPANY_KPP = "770001001" + +PARTNER_INN = "7700000002" +PARTNER_KPP = "770001002" + +VALID_TXT_TEMPLATE = """\ +1CClientBankExchange +ВерсияФормата=1.03 +Кодировка=Windows +Отправитель=Бухгалтерия предприятия +ДатаСоздания=01.01.2024 +ВремяСоздания=12:00:00 +ДатаНачала=01.01.2024 +ДатаКонца=31.01.2024 +РасчСчет=40702810000000000001 +СекцияРасчСчет +ДатаНачала=01.01.2024 +ДатаКонца=31.01.2024 +РасчСчет=40702810000000000001 +НачальныйОстаток=10000.00 +ВсегоПоступило=5000.00 +ВсегоСписано=3000.00 +КонечныйОстаток=12000.00 +КонецРасчСчет +{transactions}КонецФайла +""" + +TRANSACTION_PAYER = """\ +СекцияДокумент=Платежное поручение +Номер=1 +Дата=15.01.2024 +Сумма=1000.00 +ПлательщикСчет=40702810000000000001 +ДатаСписано=15.01.2024 +ПлательщикИНН={company_inn} +ПлательщикКПП={company_kpp} +Плательщик=ООО Наша Компания +Плательщик1=ООО Наша Компания +ПлательщикРасчСчет=40702810000000000001 +ПлательщикБанк1=Банк Плательщика +ПлательщикБИК=044525001 +ПлательщикКорсчет=30101810400000000001 +ПолучательСчет=40702810000000000002 +ПолучательИНН={partner_inn} +ПолучательКПП={partner_kpp} +Получатель=ООО Контрагент +Получатель1=ООО Контрагент +ПолучательРасчСчет=40702810000000000002 +ПолучательБанк1=Банк Получателя +ПолучательБИК=044525002 +ПолучательКорсчет=30101810400000000002 +НазначениеПлатежа=Оплата по договору №1 +КонецДокумента +""" + +TRANSACTION_RECIPIENT = """\ +СекцияДокумент=Платежное поручение +Номер=2 +Дата=16.01.2024 +Сумма=2000.00 +ПлательщикСчет=40702810000000000002 +ДатаПоступило=16.01.2024 +ПлательщикИНН={partner_inn} +ПлательщикКПП={partner_kpp} +Плательщик=ООО Контрагент +Плательщик1=ООО Контрагент +ПлательщикРасчСчет=40702810000000000002 +ПлательщикБанк1=Банк Плательщика +ПлательщикБИК=044525002 +ПлательщикКорсчет=30101810400000000002 +ПолучательСчет=40702810000000000001 +ПолучательИНН={company_inn} +ПолучательКПП={company_kpp} +Получатель=ООО Наша Компания +Получатель1=ООО Наша Компания +ПолучательРасчСчет=40702810000000000001 +ПолучательБанк1=Банк Получателя +ПолучательБИК=044525001 +ПолучательКорсчет=30101810400000000001 +НазначениеПлатежа=Поступление по договору №2 +КонецДокумента +""" + +TRANSACTION_UNKNOWN_INN = """\ +СекцияДокумент=Платежное поручение +Номер=3 +Дата=17.01.2024 +Сумма=500.00 +ПлательщикСчет=40702810000000000003 +ДатаСписано=17.01.2024 +ПлательщикИНН=9999999999 +ПлательщикКПП=999999999 +Плательщик=ООО Чужая Компания +Плательщик1=ООО Чужая Компания +ПлательщикРасчСчет=40702810000000000003 +ПлательщикБанк1=Чужой Банк +ПлательщикБИК=044525003 +ПлательщикКорсчет=30101810400000000003 +ПолучательСчет=40702810000000000004 +ПолучательИНН=8888888888 +ПолучательКПП=888888888 +Получатель=ООО Другая Компания +Получатель1=ООО Другая Компания +ПолучательРасчСчет=40702810000000000004 +ПолучательБанк1=Другой Банк +ПолучательБИК=044525004 +ПолучательКорсчет=30101810400000000004 +НазначениеПлатежа=Транзакция без нашей компании +КонецДокумента +""" + + +def _encode(text): + """Encode text to base64 as cp1251 (as the wizard expects).""" + return base64.b64encode(text.encode('cp1251')) + + +def _make_txt(transactions=""): + return VALID_TXT_TEMPLATE.format(transactions=transactions) + + +def _payer_tx(): + return TRANSACTION_PAYER.format( + company_inn=COMPANY_INN, company_kpp=COMPANY_KPP, + partner_inn=PARTNER_INN, partner_kpp=PARTNER_KPP, + ) + + +def _recipient_tx(): + return TRANSACTION_RECIPIENT.format( + company_inn=COMPANY_INN, company_kpp=COMPANY_KPP, + partner_inn=PARTNER_INN, partner_kpp=PARTNER_KPP, + ) + + +def _unknown_inn_tx(): + return TRANSACTION_UNKNOWN_INN + + +# --------------------------------------------------------------------------- +# Fixtures / setUp helpers +# --------------------------------------------------------------------------- + +class _Base(TransactionCase): + """Common setUp: company VAT, bank journal with use_in_bank_statement.""" + + def setUp(self): + super().setUp() + # Set company VAT so the parser can match INN + self.env.company.write({'vat': COMPANY_INN}) + + # Create (or find) a bank journal with use_in_bank_statement=True + self.journal = self.env['account.journal'].search( + [('type', '=', 'bank'), ('use_in_bank_statement', '=', True)], + limit=1, + ) + if not self.journal: + self.journal = self.env['account.journal'].create({ + 'name': 'Test Bank Journal', + 'type': 'bank', + 'code': 'TBNK', + 'use_in_bank_statement': True, + }) + + def _wizard(self, file_content_bytes, file_name='statement.txt'): + """Create an InvoiceImportWizard record.""" + return self.env['invoice.import.wizard'].create({ + 'file': base64.b64encode(file_content_bytes), + 'file_name': file_name, + }) + + +# --------------------------------------------------------------------------- +# TestParser1CBasic +# --------------------------------------------------------------------------- + +class TestParser1CBasic(_Base): + """Validates: Requirements 2.1, 2.2, 2.3""" + + def test_valid_txt_parses_without_exception(self): + """Req 2.1 — correct TXT file is parsed without exceptions.""" + content = _make_txt().encode('cp1251') + wizard = self._wizard(content, 'statement.txt') + # action_import_invoice should not raise + wizard.action_import_invoice() + + def test_wrong_extension_raises_user_error(self): + """Req 2.2 — non-.txt extension raises UserError.""" + content = _make_txt().encode('cp1251') + wizard = self._wizard(content, 'statement.csv') + with self.assertRaises(UserError): + wizard.action_import_invoice() + + def test_no_file_raises_user_error(self): + """Req 2.3 — missing file raises UserError.""" + wizard = self.env['invoice.import.wizard'].create({ + 'file': False, + 'file_name': 'statement.txt', + }) + with self.assertRaises(UserError): + wizard.action_import_invoice() + + +# --------------------------------------------------------------------------- +# TestParser1CLines +# --------------------------------------------------------------------------- + +class TestParser1CLines(_Base): + """Validates: Requirements 2.4, 2.5, 2.6""" + + def _import_and_get_lines(self, transactions_text): + content = _make_txt(transactions_text).encode('cp1251') + wizard = self._wizard(content, 'statement.txt') + wizard.action_import_invoice() + return self.env['account.bank.statement.line'].search([], order='id desc') + + def test_company_as_payer_creates_negative_amount(self): + """Req 2.4 — company INN as payer → negative amount line.""" + lines = self._import_and_get_lines(_payer_tx()) + payer_lines = lines.filtered(lambda l: l.payment_ref == '1') + self.assertTrue(payer_lines, "Expected a statement line with payment_ref='1'") + self.assertLess(payer_lines[0].amount, 0, "Amount should be negative when company is payer") + + def test_company_as_recipient_creates_positive_amount(self): + """Req 2.5 — company INN as recipient → positive amount line.""" + lines = self._import_and_get_lines(_recipient_tx()) + recipient_lines = lines.filtered(lambda l: l.payment_ref == '2') + self.assertTrue(recipient_lines, "Expected a statement line with payment_ref='2'") + self.assertGreater(recipient_lines[0].amount, 0, "Amount should be positive when company is recipient") + + def test_duplicate_line_is_skipped(self): + """Req 2.6 — importing the same transaction twice does not create a duplicate.""" + tx = _payer_tx() + content = _make_txt(tx).encode('cp1251') + + # First import + self._wizard(content, 'statement.txt').action_import_invoice() + count_after_first = self.env['account.bank.statement.line'].search_count( + [('payment_ref', '=', '1')] + ) + + # Second import of the same file + self._wizard(content, 'statement.txt').action_import_invoice() + count_after_second = self.env['account.bank.statement.line'].search_count( + [('payment_ref', '=', '1')] + ) + + self.assertEqual(count_after_first, count_after_second, + "Duplicate transaction should be skipped on second import") + + +# --------------------------------------------------------------------------- +# TestParser1CPartner +# --------------------------------------------------------------------------- + +class TestParser1CPartner(_Base): + """Validates: Requirements 2.7, 2.9""" + + def test_unknown_inn_kpp_creates_new_partner(self): + """Req 2.7 — unknown INN/KPP → new partner of type 'company' is created.""" + # Ensure partner does not exist + self.env['res.partner'].search([('vat', '=', PARTNER_INN)]).unlink() + + content = _make_txt(_payer_tx()).encode('cp1251') + self._wizard(content, 'statement.txt').action_import_invoice() + + partner = self.env['res.partner'].search([('vat', '=', PARTNER_INN)], limit=1) + self.assertTrue(partner, "A new partner should have been created") + self.assertEqual(partner.company_type, 'company', + "New partner should have company_type='company'") + + def test_unknown_company_inn_in_transaction_raises_user_error(self): + """Req 2.9 — company INN not found as payer or recipient → UserError.""" + content = _make_txt(_unknown_inn_tx()).encode('cp1251') + wizard = self._wizard(content, 'statement.txt') + with self.assertRaises(UserError): + wizard.action_import_invoice() diff --git a/account_bank_statement_1c_import/views/account_journal_dashboard_inherit.xml b/account_bank_statement_1c_import/views/account_journal_dashboard_inherit.xml new file mode 100644 index 00000000..807456eb --- /dev/null +++ b/account_bank_statement_1c_import/views/account_journal_dashboard_inherit.xml @@ -0,0 +1,16 @@ + + + account.dashboard.inherit + account.journal + + + + + + + + \ No newline at end of file diff --git a/account_bank_statement_1c_import/views/account_journal_settings.xml b/account_bank_statement_1c_import/views/account_journal_settings.xml new file mode 100644 index 00000000..51fd6402 --- /dev/null +++ b/account_bank_statement_1c_import/views/account_journal_settings.xml @@ -0,0 +1,14 @@ + + + + account.journal.form.inherit + account.journal + + + + + + + + + \ No newline at end of file diff --git a/account_bank_statement_1c_import/views/account_journal_wizard_action.xml b/account_bank_statement_1c_import/views/account_journal_wizard_action.xml new file mode 100644 index 00000000..d73c3feb --- /dev/null +++ b/account_bank_statement_1c_import/views/account_journal_wizard_action.xml @@ -0,0 +1,17 @@ + + + Import Invoice Wizard + + + code + + action = { + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'invoice.import.wizard', + 'target': 'new', + 'name': 'Import Invoice' + } + + + \ No newline at end of file diff --git a/account_bank_statement_1c_import/views/invoice_import_menu.xml b/account_bank_statement_1c_import/views/invoice_import_menu.xml new file mode 100644 index 00000000..e8f30483 --- /dev/null +++ b/account_bank_statement_1c_import/views/invoice_import_menu.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/account_bank_statement_1c_import/wizard/__init__.py b/account_bank_statement_1c_import/wizard/__init__.py new file mode 100644 index 00000000..f1355e67 --- /dev/null +++ b/account_bank_statement_1c_import/wizard/__init__.py @@ -0,0 +1 @@ +from . import invoice_import_wizard \ No newline at end of file diff --git a/account_bank_statement_1c_import/wizard/invoice_import_wizard.py b/account_bank_statement_1c_import/wizard/invoice_import_wizard.py new file mode 100644 index 00000000..642c7613 --- /dev/null +++ b/account_bank_statement_1c_import/wizard/invoice_import_wizard.py @@ -0,0 +1,202 @@ +from odoo import models, fields, _ +from odoo.exceptions import UserError +import base64 +import dateutil.parser +# import logging + +# _logger = logging.getLogger(__name__) + + +class InvoiceImportWizard(models.TransientModel): + _name = 'invoice.import.wizard' + _description = 'Import Invoice' + + file = fields.Binary(string='File', required=True) + file_name = fields.Char(string='File Name') + + def action_import_invoice(self): + # _logger.info("Начало импорта файла выписки") + + if not self.file: + # _logger.error("Файл не загружен") + raise UserError(_("Please upload the file.")) + + if not self.file_name.endswith('.txt'): + # _logger.error("Неподдерживаемый формат файла: %s", self.file_name) + raise UserError(_("Only TXT files are allowed.")) + + file_content = base64.b64decode(self.file).decode('cp1251') + journal = self.env['account.journal'].search([('type', '=', 'bank'), ('use_in_bank_statement', '=', True)], + limit=1) + if not journal: + raise UserError(_("Suitable journal not found.")) + + try: + sections = file_content.split('СекцияДокумент') + invoice_sections = sections[0] + transaction_sections = sections[1:] + + invoices = invoice_sections.split('СекцияРасчСчет')[1:] + for invoice in invoices: + statement_data = self.parse_statement_data(invoice) + + existing_statement = self.env['account.bank.statement'].search([ + ('date_from', '=', dateutil.parser.parse(statement_data.get('ДатаНачала', '').strip(), dayfirst=True).date()), + ('name', '=', statement_data.get('РасчСчет', '').strip()), + ], limit=1) + + if not existing_statement: + statement = self.create_statement(journal, statement_data) + # _logger.info("Выписка создана успешно: %s", statement.name) + self.create_statement_lines(journal, transaction_sections) + + + except Exception as e: + # _logger.error("Ошибка при импорте файла: %s", e) + raise UserError(_("Error Import: %s" % str(e))) + + message_title = _("Импорт завершен") + message_content = _("Выписка успешно импортирована.") + + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': message_title, + 'message': message_content, + }, + } + + def parse_statement_data(self, section): + lines = section.strip().split('\n') + statement_data = {} + for line in lines: + if '=' in line: + key, value = line.split('=', 1) + statement_data[key] = value + return statement_data + + def create_statement(self, journal, statement_data): + statement_vals = { + 'journal_id': journal.id, + 'name': statement_data.get('РасчСчет', '').strip(), + 'balance_start': float(statement_data.get('НачальныйОстаток', '0.0').strip()), + 'balance_end_real': float(statement_data.get('КонечныйОстаток', '0.0').strip()), + 'date_from': dateutil.parser.parse(statement_data.get('ДатаНачала', '').strip(), dayfirst=True).date(), + } + + return self.env['account.bank.statement'].sudo().create(statement_vals) + + def create_statement_lines(self, journal, sections): + for section in sections: + if section.strip(): + lines = section.strip().split('\n') + transaction = self.parse_transaction_data(lines) + if transaction: + # _logger.info("<==================================>") + # _logger.info("Создание строки выписки для транзакции №%s", transaction.get('Номер').strip()) + self.create_line(journal, transaction) + # _logger.info("Строка выписки для транзакции №%s создана успешно", transaction.get('Номер').strip()) + + def parse_transaction_data(self, lines): + transaction = {} + for line in lines: + if '=' in line: + key, value = line.split('=', 1) + transaction[key] = value + return transaction + + def create_line(self, journal, transaction): + my_company_inn = journal.company_id.vat + + transaction_date = dateutil.parser.parse(transaction.get('Дата', '').strip(), dayfirst=True).date() + statement = self.env['account.bank.statement'].search([ + ('date_from', '=', transaction_date), + ], limit=1) + + if not statement: + raise UserError(_("Statement not found for journal {} on date {}.").format(journal.name, transaction_date)) + + amount = float(transaction.get('Сумма', '0.0').strip()) + + if transaction.get('ПлательщикИНН').strip() == my_company_inn: + amount = -amount + partner_inn = transaction.get('ПолучательИНН').strip() + partner_kpp = transaction.get('ПолучательКПП').strip() + partner_name = transaction.get('Получатель').strip() + partner_account = transaction.get('ПолучательСчет').strip() + bank_bik = transaction.get('ПолучательБИК').strip() + bank_account = transaction.get('ПолучательКорсчет').strip() + bank_name = transaction.get('ПолучательБанк1').strip() + elif transaction.get('ПолучательИНН').strip() == my_company_inn: + # Если наша компания - получатель, значит это доход + partner_inn = transaction.get('ПлательщикИНН').strip() + partner_kpp = transaction.get('ПлательщикКПП').strip() + partner_name = transaction.get('Плательщик').strip() + partner_account = transaction.get('ПлательщикСчет').strip() + bank_bik = transaction.get('ПлательщикБИК').strip() + bank_account = transaction.get('ПлательщикКорсчет').strip() + bank_name = transaction.get('ПлательщикБанк1').strip() + else: + error_message = "ИНН вашей компании не найден в транзакции. Запись не создана." + error_message += "Журнал: {}, Дата транзакции: {}. ".format(journal.name, transaction_date) + error_message += "Плательщик: {}, ИНН плательщика: {}. ".format(transaction.get('Плательщик1', 'не указан').strip(), + transaction.get('ПлательщикИНН', + 'не указан').strip()) + error_message += "Получатель: {}, ИНН получателя: {}. ".format(transaction.get('Получатель1', 'не указан').strip(), + transaction.get('ПолучательИНН', + 'не указан').strip()) + raise UserError(_(f"{error_message}")) + + existing_line = self.env['account.bank.statement.line'].search([ + ('date', '=', transaction_date), + ('amount', '=', amount), + ('narration', '=', transaction.get('НазначениеПлатежа', '').strip()), + ('payment_ref', '=', transaction.get('Номер').strip()), + ], limit=1) + + if existing_line: + # _logger.info("Строка выписки уже существует: %s", existing_line.id) + return None + + partner = self.env['res.partner'].search([('vat', '=', partner_inn), ('kpp', '=', partner_kpp)], limit=1) + if not partner: + # _logger.info("Создание нового партнера: ИНН %s, КПП %s", partner_inn, partner_kpp) + partner = self.env['res.partner'].create({ + 'name': partner_name, + 'vat': partner_inn, + 'kpp': partner_kpp, + 'company_type': 'company', + }) + + bank = self.env['res.bank'].search([('bic', '=', bank_bik), ('corr_acc', '=', bank_account)], limit=1) + if not bank: + # _logger.info("Создание нового банка: БИК %s", bank_bik) + bank = self.env['res.bank'].create({ + 'name': bank_name, + 'bic': bank_bik, + 'corr_acc': bank_account, + }) + + partner_bank_account = self.env['res.partner.bank'].search( + [('acc_number', '=', partner_account), ('partner_id', '=', partner.id)], limit=1) + if not partner_bank_account: + # _logger.info("Создание нового банковского счета для партнера %s", partner.name) + partner_bank_account = self.env['res.partner.bank'].create({ + 'acc_number': partner_account, + 'bank_id': bank.id, + 'partner_id': partner.id, + }) + + line_vals = { + 'journal_id': journal.id, + 'partner_bank_id': partner_bank_account.id, + 'partner_id': partner.id, + 'statement_id': statement.id, + 'company_id': journal.company_id.id, + 'date': transaction_date, + 'amount': amount, + 'narration': transaction.get('НазначениеПлатежа', '').strip(), + 'payment_ref': transaction.get('Номер').strip(), + } + self.env['account.bank.statement.line'].sudo().create(line_vals) diff --git a/account_bank_statement_1c_import/wizard/invoice_import_wizard.xml b/account_bank_statement_1c_import/wizard/invoice_import_wizard.xml new file mode 100644 index 00000000..81b2197c --- /dev/null +++ b/account_bank_statement_1c_import/wizard/invoice_import_wizard.xml @@ -0,0 +1,25 @@ + + + invoice.import.wizard.form + invoice.import.wizard + +
+ + + + +
+
+
+
+
+ + + Import Invoice + invoice.import.wizard + form + new + +
\ No newline at end of file diff --git a/account_demo_data_loader/__init__.py b/account_demo_data_loader/__init__.py new file mode 100644 index 00000000..a0fdc10f --- /dev/null +++ b/account_demo_data_loader/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/account_demo_data_loader/__manifest__.py b/account_demo_data_loader/__manifest__.py new file mode 100644 index 00000000..e9e5e4fd --- /dev/null +++ b/account_demo_data_loader/__manifest__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Account Demo Data Loader', + 'version': '1.0', + 'category': 'Technical', + 'summary': 'Demo data for Account module', + 'depends': ['account', 'demo_data_loader_base'], + 'data': [], + 'demo': [ + 'demo/demo_account.xml', + ], + 'installable': True, + 'application': False, + 'license': 'LGPL-3', +} diff --git a/account_demo_data_loader/demo/demo_account.xml b/account_demo_data_loader/demo/demo_account.xml new file mode 100644 index 00000000..4b1e69c0 --- /dev/null +++ b/account_demo_data_loader/demo/demo_account.xml @@ -0,0 +1,72 @@ + + + + + + Клиент Альфа + alpha@demo.example.com + +1 555 400 1000 + 1 + + + + Клиент Бета + beta@demo.example.com + +1 555 400 2000 + 1 + + + + Поставщик Гамма + gamma@demo.example.com + +1 555 400 3000 + 1 + + + + + out_invoice + + + + + + Консалтинговые услуги + 10 + 150.0 + + + + + out_invoice + + + + + + Лицензия на ПО + 3 + 500.0 + + + + + Годовая поддержка + 1 + 1200.0 + + + + + in_invoice + + + + + + Канцелярские товары + 5 + 80.0 + + + diff --git a/account_demo_data_loader/models/__init__.py b/account_demo_data_loader/models/__init__.py new file mode 100644 index 00000000..6084d2ca --- /dev/null +++ b/account_demo_data_loader/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import res_config_settings diff --git a/account_demo_data_loader/models/res_config_settings.py b/account_demo_data_loader/models/res_config_settings.py new file mode 100644 index 00000000..55039836 --- /dev/null +++ b/account_demo_data_loader/models/res_config_settings.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from odoo import models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' diff --git a/account_move_templates/README.rst b/account_move_templates/README.rst new file mode 100644 index 00000000..b727c8ec --- /dev/null +++ b/account_move_templates/README.rst @@ -0,0 +1,97 @@ +============================ +Шаблоны типовых операций +============================ + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +|badge1| |badge2| + +Модуль позволяет создавать шаблоны типовых финансовых операций и применять их +для создания проводок с заранее определённым распределением по счетам. + +**Содержание** + +.. contents:: + :local: + +Возможности +=========== + +* Создание многократно используемых шаблонов типовых операций +* Определение распределения по счетам с использованием процентов +* Применение шаблонов для создания проводок через визард +* Категоризация шаблонов с помощью признаков (тегов) +* Автоматическая проверка баланса шаблона (дебет = кредит) +* Поддержка двух типов строк: + + * Продуктовая строка - заменяет счёт в существующих строках + * Строка оплаты - создаёт новые строки дебиторки/кредиторки + +Настройка +========= + +Для настройки модуля необходимо: + +#. Перейти в *Бухгалтерия > Настройка > Шаблоны типовых операций* +#. Создать новый шаблон +#. Добавить строки шаблона с указанием: + + * Счёт + * Сторона (Дебет/Кредит) + * Процент (0.01-100.00%) + * Тип строки: + + * Продуктовая строка - заменяет счёт в существующих product-строках + * Строка оплаты - создаёт новые receivable/payable строки + +#. При необходимости добавить признаки для категоризации + +Модуль автоматически проверяет, что сумма процентов по дебету равна сумме процентов по кредиту. + +Использование +============= + +Для использования модуля: + +#. Откройте любой документ, который наследует ``account.move.template.mixin`` +#. Нажмите кнопку "Создать проводку по шаблону" +#. Выберите шаблон +#. Укажите базовую сумму +#. Нажмите "Создать проводку" + +Модуль создаст новую проводку со счетами, распределёнными согласно процентам в шаблоне. + +Отслеживание ошибок +=================== + +Ошибки отслеживаются на `GitHub Issues `_. +В случае проблем, пожалуйста, проверьте, не была ли ваша проблема уже зарегистрирована. + +Авторы +====== + +Авторы +~~~~~~ + +* MK.Lab, RuOdoo + +Участники +~~~~~~~~~ + +* MK.Lab, RuOdoo + +Сопровождающие +~~~~~~~~~~~~~~ + +Модуль сопровождается MK.Lab, RuOdoo. + +.. image:: https://ruodoo.ru/logo.png + :alt: MK.Lab, RuOdoo + :target: https://ruodoo.ru + +Модуль является частью проекта расширений для бухгалтерии. diff --git a/account_move_templates/__init__.py b/account_move_templates/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/account_move_templates/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_move_templates/__manifest__.py b/account_move_templates/__manifest__.py new file mode 100644 index 00000000..8b89340e --- /dev/null +++ b/account_move_templates/__manifest__.py @@ -0,0 +1,36 @@ +{ + 'name': 'Accounting Journal Templates', + 'version': '19.0.1.0.0', + 'summary': 'Шаблоны типовых финансовых операций', + 'description': """ +Шаблоны типовых финансовых операций +==================================== + +Создание многократно используемых шаблонов типовых проводок с заранее +определённым распределением по счетам с использованием процентов. + +Возможности: +------------ +* Создание шаблонов с несколькими строками счетов +* Определение сторон (дебет/кредит) и процентов +* Автоматическая проверка баланса шаблона +* Применение шаблонов через визард для создания проводок +* Категоризация шаблонов с помощью признаков (тегов) +* Поддержка продуктовых строк и строк оплаты + """, + 'author': 'MK.Lab, RuOdoo', + 'website': 'https://ruodoo.ru', + 'category': 'Accounting/Accounting', + 'depends': ['account'], + 'data': [ + 'security/ir.model.access.csv', + 'data/demo_templates.xml', + 'views/account_move_template_views.xml', + 'views/account_move_template_wizard_views.xml', + ], + 'demo': [], + 'installable': True, + 'application': False, + 'license': 'LGPL-3', + 'maintainers': ['mklab', 'ruodoo'], +} diff --git a/account_move_templates/data/demo_templates.xml b/account_move_templates/data/demo_templates.xml new file mode 100644 index 00000000..600f906a --- /dev/null +++ b/account_move_templates/data/demo_templates.xml @@ -0,0 +1,13 @@ + + + + + Склад + 1 + + + Продажи + 2 + + + diff --git a/account_move_templates/demo/demo.xml b/account_move_templates/demo/demo.xml new file mode 100644 index 00000000..d8a5f55e --- /dev/null +++ b/account_move_templates/demo/demo.xml @@ -0,0 +1,20 @@ + + + + + + + Общие + 3 + + + Налоги + 4 + + + + + + + + diff --git a/account_move_templates/models/__init__.py b/account_move_templates/models/__init__.py new file mode 100644 index 00000000..5d8c51a3 --- /dev/null +++ b/account_move_templates/models/__init__.py @@ -0,0 +1,3 @@ +from . import account_move_template +from . import account_move_template_mixin +from . import account_move_template_wizard diff --git a/account_move_templates/models/account_move_template.py b/account_move_templates/models/account_move_template.py new file mode 100644 index 00000000..fe96da09 --- /dev/null +++ b/account_move_templates/models/account_move_template.py @@ -0,0 +1,94 @@ +from odoo import api, fields, models +from odoo.exceptions import ValidationError + + +class AccountMoveTemplateTag(models.Model): + _name = 'account.move.template.tag' + _description = 'Признак шаблона' + + name = fields.Char(string='Название', required=True, translate=True) + color = fields.Integer(string='Цвет') + + +class AccountMoveTemplate(models.Model): + _name = 'account.move.template' + _description = 'Шаблон типовой операции' + + name = fields.Char(string='Название', required=True) + description = fields.Text(string='Описание') + tag_ids = fields.Many2many( + comodel_name='account.move.template.tag', + string='Признаки', + ) + line_ids = fields.One2many( + comodel_name='account.move.template.line', + inverse_name='template_id', + string='Строки шаблона', + ) + + @api.constrains('line_ids') + def _check_balance(self): + for template in self: + if not template.line_ids: + raise ValidationError( + 'Шаблон должен содержать хотя бы одну строку.' + ) + debit_sum = sum( + line.percent for line in template.line_ids if line.move_type == 'debit' + ) + credit_sum = sum( + line.percent for line in template.line_ids if line.move_type == 'credit' + ) + if round(debit_sum, 2) != round(credit_sum, 2): + diff = round(abs(debit_sum - credit_sum), 2) + raise ValidationError( + f'Сумма дебета ({debit_sum:.2f}%) не равна сумме кредита ' + f'({credit_sum:.2f}%), разница: {diff:.2f}%' + ) + + +class AccountMoveTemplateLine(models.Model): + _name = 'account.move.template.line' + _description = 'Строка шаблона типовой операции' + + template_id = fields.Many2one( + comodel_name='account.move.template', + string='Шаблон', + required=True, + ondelete='cascade', + ) + account_id = fields.Many2one( + comodel_name='account.account', + string='Счёт', + required=True, + ondelete='restrict', + ) + move_type = fields.Selection( + selection=[('debit', 'Дебет'), ('credit', 'Кредит')], + string='Сторона', + required=True, + ) + percent = fields.Float( + string='Процент', + required=True, + digits=(5, 2), + ) + line_type = fields.Selection( + selection=[ + ('product', 'Продуктовая строка (заменяет счёт)'), + ('payment', 'Строка оплаты (receivable/payable)') + ], + string='Тип строки', + required=True, + default='product', + help='Продуктовая строка заменяет счёт в существующих product-строках инвойса. ' + 'Строка оплаты создаёт новую payment_term строку.' + ) + + @api.constrains('percent') + def _check_percent(self): + for line in self: + if line.percent < 0.01 or line.percent > 100.0: + raise ValidationError( + 'Процент должен быть от 0.01 до 100.00.' + ) diff --git a/account_move_templates/models/account_move_template_mixin.py b/account_move_templates/models/account_move_template_mixin.py new file mode 100644 index 00000000..5fd0fe73 --- /dev/null +++ b/account_move_templates/models/account_move_template_mixin.py @@ -0,0 +1,57 @@ +from odoo import api, fields, models + + +class AccountMoveTemplateMixin(models.AbstractModel): + _name = 'account.move.template.mixin' + _description = 'Миксин для создания проводок через шаблоны' + + move_ids = fields.Many2many( + comodel_name='account.move', + string='Проводки', + ) + move_count = fields.Integer( + compute='_compute_move_count', + string='Количество проводок', + ) + + @api.depends('move_ids') + def _compute_move_count(self): + for record in self: + record.move_count = len(record.move_ids) + + def action_open_journal_wizard(self): + """If move_ids is empty, open wizard. Otherwise delegate to action_view_moves.""" + self.ensure_one() + if self.move_ids: + return self.action_view_moves() + amounts = self.get_move_line_amounts() + default_amount = amounts[0]['amount'] if amounts else 0.0 + return { + 'type': 'ir.actions.act_window', + 'name': 'Создать проводку', + 'res_model': 'account.move.template.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_res_model': self._name, + 'default_res_id': self.id, + 'default_amount': default_amount, + }, + } + + def action_view_moves(self): + """Return action to view related account.move records.""" + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Проводки', + 'res_model': 'account.move', + 'view_mode': 'list,form', + 'domain': [('id', 'in', self.move_ids.ids)], + } + + def get_move_line_amounts(self): + """Override in inheriting models to provide line amounts. + Returns list of dicts: [{'name': str, 'amount': float}, ...] + """ + return [] diff --git a/account_move_templates/models/account_move_template_wizard.py b/account_move_templates/models/account_move_template_wizard.py new file mode 100644 index 00000000..13cc7f26 --- /dev/null +++ b/account_move_templates/models/account_move_template_wizard.py @@ -0,0 +1,103 @@ +from odoo import api, fields, models +from odoo.exceptions import UserError + + +class AccountMoveTemplateWizardLine(models.TransientModel): + _name = 'account.move.template.wizard.line' + _description = 'Черновая строка визарда шаблона' + + wizard_id = fields.Many2one( + comodel_name='account.move.template.wizard', + required=True, + ondelete='cascade', + ) + account_id = fields.Many2one( + comodel_name='account.account', + string='Счёт', + required=True, + ) + move_type = fields.Selection( + selection=[('debit', 'Дебет'), ('credit', 'Кредит')], + string='Сторона', + required=True, + ) + amount = fields.Float( + string='Сумма', + digits=(16, 2), + ) + + +class AccountMoveTemplateWizard(models.TransientModel): + _name = 'account.move.template.wizard' + _description = 'Визард создания проводки по шаблону' + + res_model = fields.Char(string='Модель документа', required=True) + res_id = fields.Integer(string='ID документа', required=True) + template_id = fields.Many2one( + comodel_name='account.move.template', + string='Шаблон', + ) + amount = fields.Float( + string='Базовая сумма', + digits=(16, 2), + ) + draft_line_ids = fields.One2many( + comodel_name='account.move.template.wizard.line', + inverse_name='wizard_id', + string='Черновые строки', + ) + + @api.onchange('template_id', 'amount') + def _onchange_compute_draft_lines(self): + """Recompute draft lines when template or amount changes.""" + self.draft_line_ids = [(5, 0, 0)] # clear existing + if not self.template_id or not self.amount: + return + lines = [] + for tpl_line in self.template_id.line_ids: + line_amount = self.amount * tpl_line.percent / 100.0 + lines.append((0, 0, { + 'account_id': tpl_line.account_id.id, + 'move_type': tpl_line.move_type, + 'amount': line_amount, + })) + self.draft_line_ids = lines + + def action_post(self): + """Create account.move from draft lines and link to source document.""" + self.ensure_one() + if not self.template_id or not self.amount: + raise UserError('Необходимо выбрать шаблон и указать базовую сумму.') + + try: + # Build move lines + move_line_vals = [] + for draft_line in self.draft_line_ids: + if draft_line.move_type == 'debit': + debit = draft_line.amount + credit = 0.0 + else: + debit = 0.0 + credit = draft_line.amount + move_line_vals.append((0, 0, { + 'account_id': draft_line.account_id.id, + 'debit': debit, + 'credit': credit, + 'name': self.template_id.name, + })) + + # Create the move + move = self.env['account.move'].create({ + 'move_type': 'entry', + 'state': 'draft', + 'line_ids': move_line_vals, + }) + + # Link move to source document via move_ids + source_record = self.env[self.res_model].browse(self.res_id) + source_record.move_ids = [(4, move.id)] + + except Exception as e: + raise UserError(f'Ошибка при создании проводки: {str(e)}') from e + + return {'type': 'ir.actions.act_window_close'} diff --git a/account_move_templates/security/ir.model.access.csv b/account_move_templates/security/ir.model.access.csv new file mode 100644 index 00000000..fcb0f79b --- /dev/null +++ b/account_move_templates/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_move_template_user,account.move.template user,model_account_move_template,account.group_account_user,1,1,1,1 +access_account_move_template_line_user,account.move.template.line user,model_account_move_template_line,account.group_account_user,1,1,1,1 +access_account_move_template_tag_user,account.move.template.tag user,model_account_move_template_tag,account.group_account_user,1,1,1,1 +access_account_move_template_wizard_user,account.move.template.wizard user,model_account_move_template_wizard,account.group_account_user,1,1,1,1 +access_account_move_template_wizard_line_user,account.move.template.wizard.line user,model_account_move_template_wizard_line,account.group_account_user,1,1,1,1 diff --git a/account_move_templates/tests/__init__.py b/account_move_templates/tests/__init__.py new file mode 100644 index 00000000..80e48924 --- /dev/null +++ b/account_move_templates/tests/__init__.py @@ -0,0 +1 @@ +from . import test_template diff --git a/account_move_templates/tests/test_template.py b/account_move_templates/tests/test_template.py new file mode 100644 index 00000000..ad235bfb --- /dev/null +++ b/account_move_templates/tests/test_template.py @@ -0,0 +1,200 @@ +""" +Tests for Template_Engine (account_move_templates). + +Validates: Requirements 3.1, 3.2, 3.3, 3.4, 3.5 +""" +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_account(env, account_type='asset_current'): + """Return an existing account of the given type, or create one.""" + account = env['account.account'].search( + [('account_type', '=', account_type)], limit=1 + ) + if not account: + account = env['account.account'].create({ + 'name': f'Test Account ({account_type})', + 'code': f'TST{account_type[:4].upper()}', + 'account_type': account_type, + }) + return account + + +def _make_template(env, name='Test Template', lines=None): + """Create an AccountMoveTemplate with the given lines. + + lines: list of dicts with keys: account_id, move_type, percent, line_type + """ + vals = {'name': name} + if lines is not None: + vals['line_ids'] = [(0, 0, line) for line in lines] + return env['account.move.template'].create(vals) + + +# --------------------------------------------------------------------------- +# TestMoveTemplateValidation +# --------------------------------------------------------------------------- + +class TestMoveTemplateValidation(TransactionCase): + """Validates: Requirements 3.1, 3.2, 3.3, 3.4""" + + def setUp(self): + super().setUp() + self.account_debit = _get_account(self.env, 'asset_current') + self.account_credit = _get_account(self.env, 'liability_current') + + def _line(self, move_type, percent, account=None): + if account is None: + account = self.account_debit if move_type == 'debit' else self.account_credit + return { + 'account_id': account.id, + 'move_type': move_type, + 'percent': percent, + 'line_type': 'product', + } + + def test_no_lines_raises_validation_error(self): + """Req 3.1 — template without lines raises ValidationError.""" + with self.assertRaises(ValidationError): + _make_template(self.env, name='Empty Template', lines=[]) + + def test_imbalanced_percentages_raises_validation_error(self): + """Req 3.2 — debit sum != credit sum raises ValidationError.""" + with self.assertRaises(ValidationError): + _make_template(self.env, name='Imbalanced', lines=[ + self._line('debit', 60.0), + self._line('credit', 40.0), + ]) + + def test_balanced_percentages_saves_without_error(self): + """Req 3.3 — debit sum == credit sum saves without error.""" + template = _make_template(self.env, name='Balanced', lines=[ + self._line('debit', 100.0), + self._line('credit', 100.0), + ]) + self.assertTrue(template.id, "Template should be saved with a valid ID") + + def test_percent_below_minimum_raises_validation_error(self): + """Req 3.4 — percent < 0.01 raises ValidationError.""" + with self.assertRaises(ValidationError): + _make_template(self.env, name='Low Percent', lines=[ + self._line('debit', 0.001), + self._line('credit', 0.001), + ]) + + def test_percent_above_maximum_raises_validation_error(self): + """Req 3.4 — percent > 100.0 raises ValidationError.""" + with self.assertRaises(ValidationError): + _make_template(self.env, name='High Percent', lines=[ + self._line('debit', 101.0), + self._line('credit', 101.0), + ]) + + +# --------------------------------------------------------------------------- +# TestMoveTemplateWizard +# --------------------------------------------------------------------------- + +class TestMoveTemplateWizard(TransactionCase): + """Validates: Requirement 3.5""" + + def setUp(self): + super().setUp() + self.account_debit = _get_account(self.env, 'asset_current') + self.account_credit = _get_account(self.env, 'liability_current') + + # Create a balanced template: 100% debit / 100% credit + self.template = self.env['account.move.template'].create({ + 'name': 'Wizard Test Template', + 'line_ids': [ + (0, 0, { + 'account_id': self.account_debit.id, + 'move_type': 'debit', + 'percent': 100.0, + 'line_type': 'product', + }), + (0, 0, { + 'account_id': self.account_credit.id, + 'move_type': 'credit', + 'percent': 100.0, + 'line_type': 'product', + }), + ], + }) + + # Create a source document that uses the mixin (account.move itself + # does not use the mixin, so we create a minimal move to act as source) + self.source_move = self.env['account.move'].create({ + 'move_type': 'entry', + 'state': 'draft', + 'line_ids': [ + (0, 0, { + 'account_id': self.account_debit.id, + 'debit': 0.0, + 'credit': 0.0, + 'name': 'Source line', + }), + ], + }) + + def test_apply_template_creates_draft_move_with_correct_distribution(self): + """Req 3.5 — applying template via wizard creates a draft account.move + with correct account distribution.""" + base_amount = 1000.0 + + wizard = self.env['account.move.template.wizard'].create({ + 'res_model': 'account.move', + 'res_id': self.source_move.id, + 'template_id': self.template.id, + 'amount': base_amount, + }) + + # Trigger onchange to populate draft lines + wizard._onchange_compute_draft_lines() + + # Verify draft lines were computed + self.assertEqual(len(wizard.draft_line_ids), 2, + "Wizard should have 2 draft lines (one debit, one credit)") + + debit_line = wizard.draft_line_ids.filtered(lambda l: l.move_type == 'debit') + credit_line = wizard.draft_line_ids.filtered(lambda l: l.move_type == 'credit') + + self.assertAlmostEqual(debit_line.amount, base_amount, + msg="Debit line amount should equal base_amount * 100%") + self.assertAlmostEqual(credit_line.amount, base_amount, + msg="Credit line amount should equal base_amount * 100%") + + # Post the wizard — creates the account.move + wizard.action_post() + + # Reload source move and check linked moves + self.source_move.invalidate_recordset() + linked_moves = self.source_move.move_ids + + self.assertTrue(linked_moves, "A new account.move should be linked to the source") + + new_move = linked_moves[-1] + self.assertEqual(new_move.state, 'draft', + "Created move should be in draft state") + + move_lines = new_move.line_ids + debit_move_line = move_lines.filtered(lambda l: l.debit > 0) + credit_move_line = move_lines.filtered(lambda l: l.credit > 0) + + self.assertTrue(debit_move_line, "Move should have a debit line") + self.assertTrue(credit_move_line, "Move should have a credit line") + + self.assertAlmostEqual(debit_move_line[0].debit, base_amount, + msg="Debit amount on move line should match base_amount") + self.assertAlmostEqual(credit_move_line[0].credit, base_amount, + msg="Credit amount on move line should match base_amount") + + self.assertEqual(debit_move_line[0].account_id, self.account_debit, + "Debit line should use the debit account from template") + self.assertEqual(credit_move_line[0].account_id, self.account_credit, + "Credit line should use the credit account from template") diff --git a/account_move_templates/views/account_move_template_views.xml b/account_move_templates/views/account_move_template_views.xml new file mode 100644 index 00000000..dc39da61 --- /dev/null +++ b/account_move_templates/views/account_move_template_views.xml @@ -0,0 +1,82 @@ + + + + + + + account.move.template.list + account.move.template + + + + + + + + + + + + account.move.template.form + account.move.template + +
+ +
+
+ + + + + + + + + + + + + + + + +
+
+
+
+ + + + account.move.template.search + account.move.template + + + + + + + + + + + + Шаблоны типовых операций + account.move.template + list,form + + + + + + +
+
diff --git a/account_move_templates/views/account_move_template_wizard_views.xml b/account_move_templates/views/account_move_template_wizard_views.xml new file mode 100644 index 00000000..9eb44978 --- /dev/null +++ b/account_move_templates/views/account_move_template_wizard_views.xml @@ -0,0 +1,30 @@ + + + + + account.move.template.wizard.form + account.move.template.wizard + +
+ + + + + + + + + + + +
+
+
+
+
+
+
diff --git a/account_move_templates_invoice/README.rst b/account_move_templates_invoice/README.rst new file mode 100644 index 00000000..6977ab58 --- /dev/null +++ b/account_move_templates_invoice/README.rst @@ -0,0 +1,103 @@ +==================================================== +Шаблоны типовых операций - Интеграция с инвойсами +==================================================== + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +|badge1| |badge2| + +Модуль расширяет функциональность шаблонов типовых операций для работы +с инвойсами клиентов и счетами поставщиков, автоматически применяя шаблоны +при проведении документов. + +**Содержание** + +.. contents:: + :local: + +Возможности +=========== + +* Автоматическое применение шаблонов при проведении инвойсов +* Замена стандартного распределения по счетам на распределение из шаблона +* Поддержка инвойсов клиентов и счетов поставщиков +* Настройка через параметры системы +* Сохранение строк инвойса с обновлением счетов в проводках +* Автоматическое создание строк оплаты с датами погашения + +Настройка +========= + +Для настройки модуля необходимо: + +#. Перейти в *Бухгалтерия > Настройка > Параметры* +#. В разделе "Шаблоны типовых операций" включить опцию "Использовать шаблоны для инвойсов" +#. Сохранить настройки + +Настройка шаблонов: +~~~~~~~~~~~~~~~~~~~ + +При создании шаблонов для инвойсов настройте типы строк: + +* **Продуктовая строка**: Заменяет счёт в существующих продуктовых строках (счета доходов/расходов) +* **Строка оплаты**: Создаёт строки дебиторки/кредиторки с датами погашения + +Использование +============= + +После настройки модуль работает автоматически: + +#. Создайте инвойс клиента или счёт поставщика +#. Добавьте строки инвойса как обычно +#. Выберите шаблон типовой операции в поле "Шаблон типовой операции" +#. Нажмите "Провести" + +Модуль выполнит следующие действия: + +* Удалит стандартные строки условий оплаты +* Обновит счета в продуктовых строках согласно шаблону (line_type='product') +* Создаст новые строки оплаты согласно шаблону (line_type='payment') +* Установит корректные даты погашения для счетов дебиторки/кредиторки +* Проведёт инвойс с распределением по счетам из шаблона + +Известные проблемы / Планы развития +==================================== + +* В настоящее время поддерживаются только типы документов out_invoice и in_invoice +* Шаблон должен быть выбран до проведения документа +* В планах: Автоматический выбор шаблона на основе свойств инвойса + +Отслеживание ошибок +=================== + +Ошибки отслеживаются на `GitHub Issues `_. +В случае проблем, пожалуйста, проверьте, не была ли ваша проблема уже зарегистрирована. + +Авторы +====== + +Авторы +~~~~~~ + +* MK.Lab, RuOdoo + +Участники +~~~~~~~~~ + +* MK.Lab, RuOdoo + +Сопровождающие +~~~~~~~~~~~~~~ + +Модуль сопровождается MK.Lab, RuOdoo. + +.. image:: https://ruodoo.ru/logo.png + :alt: MK.Lab, RuOdoo + :target: https://ruodoo.ru + +Модуль является частью проекта расширений для бухгалтерии. diff --git a/account_move_templates_invoice/__init__.py b/account_move_templates_invoice/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/account_move_templates_invoice/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_move_templates_invoice/__manifest__.py b/account_move_templates_invoice/__manifest__.py new file mode 100644 index 00000000..451ce088 --- /dev/null +++ b/account_move_templates_invoice/__manifest__.py @@ -0,0 +1,42 @@ +{ + 'name': 'Accounting Journal Templates - Invoice', + 'version': '19.0.1.0.0', + 'summary': 'Интеграция шаблонов типовых операций с Invoice и Vendor Bill', + 'description': """ +Шаблоны типовых операций - Интеграция с инвойсами +================================================== + +Автоматическое применение шаблонов типовых операций к инвойсам клиентов и счетам +поставщиков при проведении, заменяя стандартное распределение по счетам на +распределение из шаблона. + +Возможности: +------------ +* Автоматическое применение шаблонов при проведении инвойсов +* Замена счетов в продуктовых строках на счета из шаблона +* Создание строк условий оплаты с корректными датами погашения +* Поддержка инвойсов клиентов и счетов поставщиков +* Настройка через параметры системы +* Сохранение итоговых сумм инвойса + +Технические детали: +------------------- +* Расширяет модель account.move +* Переопределяет метод action_post() +* Обновляет существующие продуктовые строки вместо создания дубликатов +* Создаёт строки payment_term для счетов дебиторки/кредиторки +* Поддерживает баланс и валидацию инвойса + """, + 'author': 'MK.Lab, RuOdoo', + 'website': 'https://ruodoo.ru', + 'category': 'Accounting/Accounting', + 'depends': ['account', 'account_move_templates'], + 'data': [ + 'views/account_move_views.xml', + 'views/res_config_settings_views.xml', + ], + 'installable': True, + 'application': False, + 'license': 'LGPL-3', + 'maintainers': ['mklab', 'ruodoo'], +} diff --git a/account_move_templates_invoice/models/__init__.py b/account_move_templates_invoice/models/__init__.py new file mode 100644 index 00000000..8b309078 --- /dev/null +++ b/account_move_templates_invoice/models/__init__.py @@ -0,0 +1,3 @@ +from . import account_move +from . import account_move_line +from . import res_config_settings diff --git a/account_move_templates_invoice/models/account_move.py b/account_move_templates_invoice/models/account_move.py new file mode 100644 index 00000000..8cd79f6e --- /dev/null +++ b/account_move_templates_invoice/models/account_move.py @@ -0,0 +1,151 @@ +from odoo import api, fields, models +from odoo.exceptions import UserError +import logging + +_logger = logging.getLogger(__name__) + + +class AccountMove(models.Model): + _inherit = ['account.move', 'account.move.template.mixin'] + + move_ids = fields.Many2many( + comodel_name='account.move', + relation='account_move_template_invoice_move_rel', + column1='document_id', + column2='move_id', + string='Проводки по шаблону', + ) + + journal_template_id = fields.Many2one( + comodel_name='account.move.template', + string='Шаблон типовой операции', + default=lambda self: self._default_journal_template(), + ) + + def _default_journal_template(self): + use = self.env['ir.config_parameter'].sudo().get_param( + 'account_move_templates_invoice.use_journal_templates_for_invoices' + ) + if use: + return self.env['account.move.template'].search([], limit=1, order='id asc') + return False + + def get_move_line_amounts(self): + """Return invoice total as the base amount for the wizard.""" + self.ensure_one() + return [{'name': self.name or '/', 'amount': self.amount_total}] + + def _replace_lines_from_template(self, move): + """ + Replace ALL lines (product + payment_term) with template lines + plus one explicit payment_term line with date_maturity. + + We pass 'balance' explicitly in vals so _get_protected_vals protects + it from being overwritten by _sync_invoice. + """ + _logger.info("TEMPLATE DEBUG: _replace_lines_from_template START for move %s", move.id) + template = move.journal_template_id + _logger.info("TEMPLATE DEBUG: template = %s", template) + base_amount = move.amount_untaxed or move.amount_total + _logger.info("TEMPLATE DEBUG: base_amount = %s", base_amount) + + # Determine receivable/payable account + partner = move.commercial_partner_id.with_company(move.company_id) + if move.is_sale_document(include_receipts=True): + term_account = partner.property_account_receivable_id + else: + term_account = partner.property_account_payable_id + _logger.info("TEMPLATE DEBUG: term_account = %s", term_account) + + # due date: use invoice_date_due, invoice_date, or today + due_date = ( + move.invoice_date_due + or move.invoice_date + or fields.Date.context_today(move) + ) + _logger.info("TEMPLATE DEBUG: due_date = %s", due_date) + + # Remove only payment_term lines, keep product lines from invoice_line_ids + _logger.info("TEMPLATE DEBUG: Removing existing payment_term lines") + lines_to_remove = move.line_ids.filtered(lambda l: l.display_type == 'payment_term') + _logger.info("TEMPLATE DEBUG: Lines to remove: %s", [(l.id, l.account_id.code, l.display_type) for l in lines_to_remove]) + lines_to_remove.with_context( + dynamic_unlink=True, + check_move_validity=False, + skip_invoice_sync=True, + ).unlink() + _logger.info("TEMPLATE DEBUG: payment_term lines removed") + + AML = self.env['account.move.line'] + ctx = dict(check_move_validity=False, skip_invoice_sync=True) + + # 1. Process template lines based on line_type + _logger.info("TEMPLATE DEBUG: Processing template lines") + + # Get existing product lines from invoice_line_ids + product_lines = move.line_ids.filtered(lambda l: l.display_type == 'product') + _logger.info("TEMPLATE DEBUG: Found %d product lines", len(product_lines)) + + # Separate template lines by type + template_product_lines = template.line_ids.filtered(lambda l: l.line_type == 'product') + template_payment_lines = template.line_ids.filtered(lambda l: l.line_type == 'payment') + + _logger.info("TEMPLATE DEBUG: Template has %d product lines and %d payment lines", + len(template_product_lines), len(template_payment_lines)) + + # Update existing product lines with accounts from template (line_type='product') + for idx, product_line in enumerate(product_lines): + if idx < len(template_product_lines): + tpl_line = template_product_lines[idx] + _logger.info("TEMPLATE DEBUG: Updating product line %d: old account=%s, new account=%s", + product_line.id, product_line.account_id.code, tpl_line.account_id.code) + product_line.with_context(**ctx).write({'account_id': tpl_line.account_id.id}) + + # Create payment lines from template (line_type='payment') + _logger.info("TEMPLATE DEBUG: Creating payment lines from template") + for tpl_line in template_payment_lines: + line_amount = base_amount * tpl_line.percent / 100.0 + balance = line_amount if tpl_line.move_type == 'debit' else -line_amount + _logger.info("TEMPLATE DEBUG: Creating payment line: account=%s, balance=%s", + tpl_line.account_id.id, balance) + + vals = { + 'move_id': move.id, + 'account_id': tpl_line.account_id.id, + 'name': template.name, + 'balance': balance, + 'amount_currency': balance, + 'date_maturity': due_date, + 'display_type': 'payment_term', + } + + AML.with_context(**ctx).create(vals) + _logger.info("TEMPLATE DEBUG: Template lines processed") + + _logger.info("TEMPLATE DEBUG: _replace_lines_from_template END") + + def action_post(self): + _logger.info("TEMPLATE DEBUG: action_post called for moves: %s", self.ids) + use_templates = self.env['ir.config_parameter'].sudo().get_param( + 'account_move_templates_invoice.use_journal_templates_for_invoices' + ) + _logger.info("TEMPLATE DEBUG: use_templates = %s", use_templates) + + if use_templates: + for move in self.filtered( + lambda m: m.move_type in ('out_invoice', 'in_invoice') + ): + _logger.info("TEMPLATE DEBUG: Processing move %s, template: %s", move.id, move.journal_template_id) + if not move.journal_template_id: + raise UserError( + 'Выберите шаблон типовой операции перед проведением.' + ) + try: + _logger.info("TEMPLATE DEBUG: Calling _replace_lines_from_template") + self._replace_lines_from_template(move) + _logger.info("TEMPLATE DEBUG: _replace_lines_from_template completed") + except Exception as e: + _logger.error("TEMPLATE DEBUG: Error in _replace_lines_from_template: %s", e, exc_info=True) + raise + + return super().action_post() diff --git a/account_move_templates_invoice/models/account_move_line.py b/account_move_templates_invoice/models/account_move_line.py new file mode 100644 index 00000000..65614b6b --- /dev/null +++ b/account_move_templates_invoice/models/account_move_line.py @@ -0,0 +1,7 @@ +from odoo import models + + +class AccountMoveLine(models.Model): + _inherit = 'account.move.line' + + # No overrides needed - we handle everything in action_post() diff --git a/account_move_templates_invoice/models/res_config_settings.py b/account_move_templates_invoice/models/res_config_settings.py new file mode 100644 index 00000000..7793451d --- /dev/null +++ b/account_move_templates_invoice/models/res_config_settings.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + use_journal_templates_for_invoices = fields.Boolean( + string='Использовать шаблоны типовых операций для счетов', + config_parameter='account_move_templates_invoice.use_journal_templates_for_invoices', + ) diff --git a/account_move_templates_invoice/views/account_move_views.xml b/account_move_templates_invoice/views/account_move_views.xml new file mode 100644 index 00000000..fb8614a9 --- /dev/null +++ b/account_move_templates_invoice/views/account_move_views.xml @@ -0,0 +1,31 @@ + + + + + account.move.template.invoice.form + account.move + + + + + + + + + + + + + + + + + diff --git a/account_move_templates_invoice/views/res_config_settings_views.xml b/account_move_templates_invoice/views/res_config_settings_views.xml new file mode 100644 index 00000000..9552a4fb --- /dev/null +++ b/account_move_templates_invoice/views/res_config_settings_views.xml @@ -0,0 +1,20 @@ + + + + + res.config.settings.view.form.template.invoice + res.config.settings + + + + + + + + + + + + + diff --git a/base_tier_validation/README.rst b/base_tier_validation/README.rst new file mode 100644 index 00000000..ce33fce2 --- /dev/null +++ b/base_tier_validation/README.rst @@ -0,0 +1,307 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +==================== +Base Tier Validation +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:3e44413fd72f8949deba313c3f31047cbf30ba3b17d78342590d2376001d905f + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png + :target: https://odoo-community.org/page/development-status + :alt: Mature +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github + :target: https://github.com/OCA/server-ux/tree/18.0/base_tier_validation + :alt: OCA/server-ux +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-ux-18-0/server-ux-18-0-base_tier_validation + :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-ux&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Validating some operations is a common need across different areas in a +company and sometimes it also involves several people and stages in the +process. With this module you will be able to define your custom +validation workflows for any Odoo document. + +This module does not provide a functionality by itself but an abstract +model to implement a validation process based on tiers on other models +(e.g. purchase orders, sales orders, budgets, expenses...). + +**Note:** To be able to use this module in a new model you will need +some development. + +See +`purchase_tier_validation `__ +as an example of implementation. + +Additionally, if your state field is a (stored) computed field, you need +to set ``_tier_validation_state_field_is_computed`` to ``True`` in your +model Python file, and you will want to add the dependent fields of the +compute method in ``_get_after_validation_exceptions`` and +``_get_under_validation_exceptions``. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +1. Go to *Settings > Technical > Tier Validations > Tier Definition*. +2. Create as many tiers as you want for any model having tier validation + functionality. + +**Note:** + +- If check *Notify Reviewers on Creation*, all possible reviewers will + be notified by email when this definition is triggered. +- If check *Notify reviewers on reaching pending* if you want to send a + notification when pending status is reached. This is usefull in a + approve by sequence scenario to only notify reviewers when it is their + turn in the sequence. +- If check *Comment*, reviewers can comment after click Validate or + Reject. +- If check *Approve by sequence*, reviewers is forced to review by + specified sequence. + +To configure Tier Validation Exceptions, you need to: + +1. Go to *Settings > Technical > Tier Validations > Tier Validation + Exceptions*. +2. Create as many tiers validation exceptions as you want for any model + having tier validation functionality. +3. Add desired fields to be checked in *Fields*. +4. Add desired groups that can use this Exception in *Groups*. +5. You must check *Write under Validation*, *Write after Validation* or + both. + +**Note:** + +- If you don't create any exception, the Validated record will be + readonly and cannot be modified. +- If check *Write under Validation*, records will be able to be modified + only in the defined fields when the Validation process is ongoing. +- If check *Write after Validation*, records will be able to be modified + only in the defined fields when the Validation process is finished. +- If check *Write after Validation* and *Write under Validation*, + records will be able to be modified defined fields always. + +Known issues / Roadmap +====================== + +This is the list of known issues for this module. Any proposal for +improvement will be very valuable. + +- **Issue:** + + When using approve_sequence option in any tier.definition there can be + inconsistencies in the systray notifications. + + **Description:** + + Field can_review in tier.review is used to filter out, in the systray + notifications, the reviews a user can approve. This can_review field + is updated **in the database** in method review_user_count, this can + make it very inconsistent for databases with a lot of users and + recurring updates that can change the expected behavior. + +- **Migration to 15.0:** + + The parameter \_tier_validation_manual_config will become False, on + 14.0, the default value is True, as the change is applied after the + migration. In order to use the new behavior we need to modify the + value on our expected model. + +Changelog +========= + +17.0.1.0.0 (2024-01-10) +----------------------- + +Migrated to Odoo 17. Merged module with tier_validation_waiting. To +support sending messages in a validation sequence when it is their turn +to validate. + +14.0.1.0.0 (2020-11-19) +----------------------- + +Migrated to Odoo 14. + +13.0.1.2.2 (2020-08-30) +----------------------- + +Fixes: + +- When using approve_sequence option in any tier.definition there can be + inconsistencies in the systray notifications +- When using approve_sequence, still not approve only the needed + sequence, but also other sequence for the same approver + +12.0.3.3.1 (2019-12-02) +----------------------- + +Fixes: + +- Show comment on Reviews Table. +- Edit notification with approve_sequence. + +12.0.3.3.0 (2019-11-27) +----------------------- + +New features: + +- Add comment on Reviews Table. +- Approve by sequence. + +12.0.3.2.1 (2019-11-26) +----------------------- + +Fixes: + +- Remove message_subscribe_users + +12.0.3.2.0 (2019-11-25) +----------------------- + +New features: + +- Notify reviewers + +12.0.3.1.0 (2019-07-08) +----------------------- + +Fixes: + +- Singleton error + +12.0.3.0.0 (2019-12-02) +----------------------- + +Fixes: + +- Edit Reviews Table + +12.0.2.1.0 (2019-05-29) +----------------------- + +Fixes: + +- Edit drop-down style width and position + +12.0.2.0.0 (2019-05-28) +----------------------- + +New features: + +- Pass parameters as functions. +- Add Systray. + +12.0.1.0.0 (2019-02-18) +----------------------- + +Migrated to Odoo 12. + +11.0.1.0.0 (2018-05-09) +----------------------- + +Migrated to Odoo 11. + +10.0.1.0.0 (2018-03-26) +----------------------- + +Migrated to Odoo 10. + +9.0.1.0.0 (2017-12-02) +---------------------- + +First version. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* ForgeFlow + +Contributors +------------ + +- Lois Rilo +- Naglis Jonaitis +- Adrià Gil Sorribes +- Pimolnat Suntian +- Pedro Gonzalez +- Kitti U. +- Saran Lim. +- Carlos Lopez +- Javier Colmeiro +- bosd +- Evan Soh +- Manuel Regidor +- Eduardo de Miguel +- `XCG Consulting `__: + + - Houzéfa Abbasbhay + +- Stefan Rijnhart +- Kevin Khao +- Do Anh Duy + +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. + +.. |maintainer-LoisRForgeFlow| image:: https://github.com/LoisRForgeFlow.png?size=40px + :target: https://github.com/LoisRForgeFlow + :alt: LoisRForgeFlow + +Current `maintainer `__: + +|maintainer-LoisRForgeFlow| + +This module is part of the `OCA/server-ux `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_tier_validation/__init__.py b/base_tier_validation/__init__.py new file mode 100644 index 00000000..93aa2c1f --- /dev/null +++ b/base_tier_validation/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import wizard diff --git a/base_tier_validation/__manifest__.py b/base_tier_validation/__manifest__.py new file mode 100644 index 00000000..085f13c3 --- /dev/null +++ b/base_tier_validation/__manifest__.py @@ -0,0 +1,35 @@ +# Copyright 2017-24 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Base Tier Validation", + "summary": "Implement a validation process based on tiers.", + "version": "19.0.2025.12.03", + "development_status": "Mature", + "maintainers": ["LoisRForgeFlow"], + "category": "Tools", + "website": "https://github.com/OCA/server-ux", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["mail"], + "data": [ + "data/cron_data.xml", + "data/mail_data.xml", + "security/ir.model.access.csv", + "security/tier_validation_security.xml", + "views/res_config_settings_views.xml", + "views/tier_definition_view.xml", + "views/tier_review_view.xml", + "views/tier_validation_exception_view.xml", + "wizard/comment_wizard_view.xml", + "templates/tier_validation_templates.xml", + ], + "demo": [], + "assets": { + "web.assets_backend": [ + "base_tier_validation/static/src/components/**/*", + "base_tier_validation/static/src/js/**/*", + ], + }, +} diff --git a/base_tier_validation/data/cron_data.xml b/base_tier_validation/data/cron_data.xml new file mode 100644 index 00000000..f39096a0 --- /dev/null +++ b/base_tier_validation/data/cron_data.xml @@ -0,0 +1,15 @@ + + + + Send Tier Review Reminder + 1 + days + + + model._cron_send_review_reminder() + code + + diff --git a/base_tier_validation/data/mail_data.xml b/base_tier_validation/data/mail_data.xml new file mode 100644 index 00000000..fdcef9e2 --- /dev/null +++ b/base_tier_validation/data/mail_data.xml @@ -0,0 +1,61 @@ + + + + Tier Validation Requested + + + + + + Tier Validation Accepted Notification + + + + + + Tier Validation Rejected Notification + + + + + + Tier Validation Restarted + + + + + + Tier Validation Reminder + + + + + + Tier Validation Reminder + fa-bell + + diff --git a/base_tier_validation/demo/demo.xml b/base_tier_validation/demo/demo.xml new file mode 100644 index 00000000..89789e01 --- /dev/null +++ b/base_tier_validation/demo/demo.xml @@ -0,0 +1,20 @@ + + + + + + + Согласование счёта руководителем + + individual + + domain + [('move_type', '=', 'out_invoice'), ('amount_total', '>', 100000)] + 10 + + + + + + + diff --git a/base_tier_validation/i18n/base_tier_validation.pot b/base_tier_validation/i18n/base_tier_validation.pot new file mode 100644 index 00000000..16363084 --- /dev/null +++ b/base_tier_validation/i18n/base_tier_validation.pot @@ -0,0 +1,878 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +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_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is" +" reached.Usefull in an Approve by sequence scenario. An notification request" +" to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "" diff --git a/base_tier_validation/i18n/de.po b/base_tier_validation/i18n/de.po new file mode 100644 index 00000000..115222a7 --- /dev/null +++ b/base_tier_validation/i18n/de.po @@ -0,0 +1,879 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\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_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is" +" reached.Usefull in an Approve by sequence scenario. An notification request" +" to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "" diff --git a/base_tier_validation/i18n/es.po b/base_tier_validation/i18n/es.po new file mode 100644 index 00000000..308529a1 --- /dev/null +++ b/base_tier_validation/i18n/es.po @@ -0,0 +1,993 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-04-23 10:39+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Este registro debe ser\n" +" validado." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" La operación ha sido\n" +" rechazada\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" La operación ha sido\n" +" validada\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Nombre" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Omitir, si el nivel anterior fue validado por el mismo revisor" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Un registro a revisar ha sido creado por %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Una revisión fue solicitada por %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Una revisión fue aceptada" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Una revisión fue aceptada. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "%(user)s rechazó una reseña. %(comment)s" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Una revisión fue rechaza por %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "Un proceso de validación está aún abierto para al menos un registro." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Activo" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Todos" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Cualquier usuario de un grupo específico" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Aplicar en" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Orden de aprobación por el número de secuencia especificado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Aprobar Omisión de Secuencia" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Aprobar por secuencia" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Aprobado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "Archivado" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Omitido (validado automático), si el mismo revisor validó el nivel anterior" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Puede revisar" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"Puede revisar será establecido si la revisión está pendiente y la\n" +" secuencia de aprobación se ha alcanzado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Cancelar" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Comentar" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Wizard Comentario" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Comentarios" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Compañía" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Configuración de Ajustes" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definición" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Dominio de definición" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Descripción" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Mostrar Estado" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Dominio" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Hecho Por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Hecho Por" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Campo en el registro relacionado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Grupo %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Ha comentado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "Ocultar Reseñas" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Si se establece, permite al revisor dejar un comentario sobre la reseña." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Si se establece, todos los posibles revisores serán notificados por correo " +"electrónico cuando se active esta definición." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Si se establece, todos los posibles revisores recibirán una notificación por " +"correo electrónico cuando se alcance este estado. Es útil en un escenario de " +"aprobación por secuencia. Se envía una solicitud de notificación de revisión " +"cuando les toca revisar." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Si se establece, los revisores recibirán una notificación por correo " +"electrónico cuando se acepte una revisión relacionada con esta definición." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Si se establece, los revisores recibirán una notificación por correo " +"electrónico cuando se rechace una revisión relacionada con esta definición." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Si se establece, los revisores recibirán una notificación por correo " +"electrónico cuando se reinicie una revisión relacionada con esta definición." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modelo" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Más opciones" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Necesita validación" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nueva Validación de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Siguiente Revisión" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Siguiente: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "No hay revisiones a realizar." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Notificar la Aceptación a los Revisores" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Notificar a los revisores en la creación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Notificar el Rechazo a los Revisores" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Notificar a los Revisores al Reiniciar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Notificar a los Revisores sobre la recepción de Pendientes" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Opción de utilizar una fórmula python para obtener revisores y encontrar " +"documentos" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "Pendiente" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Modelo referenciado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Rechazar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Mensaje rechazado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "ID del Documento Relacionado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Modelo del Documento Relacionado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Solicitar validación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Solicitado Por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Solicitado Por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Recurso" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Modelo Res" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Reiniciar la Validación" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Revisor" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Revisor" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Campo revisor" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Grupo revisor" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Revisores" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Revisiones" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Usuario específico" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Estado" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "La revisión ha sido reiniciada por %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Nivel" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Definición de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Fórmula de niveles" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Revisión de Nivel" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Validación por niveles" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validaciones de Nivel (abstracto)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Notificación de Validación de Nivel Aceptada" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Validación de nivel Notificación rechazada" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Validación de nivel solicitada" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Validación de nivel reiniciada" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Validaciones de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Para validar el mensaje" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Por hacer por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Para hacer por" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "usuario" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Campo Revisor válido" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Validar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Validar Rechazar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Validado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Mensaje Validado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Validado por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Fecha de Validación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Fecha de Validación Formateada" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Estado de validación" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validaciones" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "Esperando" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Sin validación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "ej. Validación de Nivel por..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "No hay res.usuarios en el campo seleccionado" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Actividades" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "La operación ha sido rechazada." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "¡La operación ha sido validada!" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "Este %s necesita ser validado" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Esta acción necesita ser validada para algún registro.\n" +#~ "Por favor, solicita una validación." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "Esta operación está en proceso de validación." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Este registro debe ser\n" +#~ " validado." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " La operación ha sido\n" +#~ " rechazada\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " La operación ha sido\n" +#~ " validada\n" +#~ " !" + +#~ msgid "" +#~ "Bypassed, if previous tier was validated by same reviewer" +#~ msgstr "" +#~ "Omitido, si el nivel anterior fue validado por el mismo revisor" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 Pendientes" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Option to forward a tier validation to other reviewer, and backward" +#~ msgstr "" +#~ "Opción de reenviar una validación de nivel a otro revisor, y hacia atrás" + +#~ msgid "Tier Forward & Backward" +#~ msgstr "Nivel hacia delante y hacia atrás" diff --git a/base_tier_validation/i18n/es_MX.po b/base_tier_validation/i18n/es_MX.po new file mode 100644 index 00000000..6483283e --- /dev/null +++ b/base_tier_validation/i18n/es_MX.po @@ -0,0 +1,949 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-08-16 22:50+0000\n" +"Last-Translator: Jesús Alan Ramos Rodríguez \n" +"Language-Team: none\n" +"Language: es_MX\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_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Nombre" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "%s ha solicitado una revisión." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Se aceptó una revisión" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Se aceptó una revisión. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "%s rechazó una revisión." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "" +"Todavía hay un proceso de validación abierto para al menos un registro." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Activo" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Todos" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Cualquier usuario de un grupo específico" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Aplicar en" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Orden de aprobación por el número de secuencia especificado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Aprobar por secuencia" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Aprobado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Puede revisar" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"Puede revisar se marcará si la revisión está pendiente y\n" +" se ha logrado aprobar la secuencia" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Cancelado" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Comentario" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Asistente de comentarios" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Comentarios" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Empresa" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definición de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Dominio de definición" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Descripción" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Dominio" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Realizado por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Realizado por" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Campo en registro relacionado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Grupo %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Tiene comentario" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "Identificación" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Si se establece, todos los posibles revisores serán notificados por correo " +"electrónico cuando se active esta definición." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Última modificación en" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modelo" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Más opciones" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Necesita validación" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nueva Definición de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "No hay revisiones que hacer." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Notificar a los revisores sobre la creación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "Pendiente" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Modelo referenciado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Rechazar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "ID de documento relacionado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Modelo de documento relacionado" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Solicitar Validación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Solicitado por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Solicitado por" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Res" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Modelo Res" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Reiniciar la validación" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Revisión" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Evaluador" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Campo de revisor" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Grupo de revisores" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Revisores" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Comentarios" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Usuario específico" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Estatus" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "%s ha restablecido la revisión." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Definición de Nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Revisión de niveles" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validación de nivel (resumen)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Notificación de validación de nivel aceptada" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Notificación de rechazo de validación de nivel" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Validación de nivel solicitada" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Se reinició la validación de nivel" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Validaciones de nivel" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Por Hacer por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Por Hacer por" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Campo de revisor válido" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Validar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Validar Rechazar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Validado" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Validado por" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Fecha de validación" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validaciones" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "p.ej. Validación de nivel para ..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "No hay res.users en el campo seleccionado" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Esta acción debe validarse para al menos un registro.\n" +#~ "Solicite una validación." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "La operación está en proceso de validación." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Este registro necesita ser\n" +#~ " validado." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " La operación ha sido\n" +#~ " rechazada\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " ¡La operación ha sido\n" +#~ " validada\n" +#~ " !" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 Pendientes" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación el" + +#, python-format +#~ msgid "Activities" +#~ msgstr "Actividades" + +#~ msgid "Users" +#~ msgstr "Usuarios" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "{} rechazó una revisión. ({})" diff --git a/base_tier_validation/i18n/fr.po b/base_tier_validation/i18n/fr.po new file mode 100644 index 00000000..8d6b934d --- /dev/null +++ b/base_tier_validation/i18n/fr.po @@ -0,0 +1,980 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-19 12:51+0000\n" +"Last-Translator: Houzéfa Abbasbhay \n" +"Language-Team: none\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.17\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Nom" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Une revue a été demandée par %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Une revue a été acceptée" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Une revue a été acceptée. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "Une revue a été refusée par %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Une revue a été refusée par %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "" +"Un processus de validation est toujours en cours pour au moins un " +"enregistrement." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Actif" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Tout" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Tout utilisateur d'un groupe spécifique" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Appliquer sur" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Ordre d'approbation suivant le numéro de séquence spécifié" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Approuver dans l'ordre" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Approuvé" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Revue possible" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"La revue est marquée possible lorsqu'elle est en attente et\n" +" qu'une séquence d'approbation a été effectuée" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Annuler" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Commentaire" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Assistant de saisie de commentaire" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Commentaires" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Société" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Définition" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Domaine de la définition" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Description" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Domaine" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Fait par" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Fait par" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Champ dans l'enregistrement rattaché" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Groupe %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Avec commentaire" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Avec cette option, tous les réviseurs autorisés seront notifiés par email " +"lors du déclenchement de cette définition." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modèle" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Plus d'options" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Validation requise" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nouveau niveau de validation" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Revue suivante" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Suivante : %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Aucune revue n'est nécessaire." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Notifier les réviseurs à la création" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Option pour utiliser une formule python pour calculer les réviseurs et " +"déterminer les enregistrements" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "En attente" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Modèle rattaché" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Rejeter" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Rejeté" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Message de rejet" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "ID de l'enregistrement rattaché" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Modèle de l'enregistrement rattaché" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Demander validation" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Demandé par" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Demandé par" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Enregistrement" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Modèle de l'enregistrement" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Recommencer la validation" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Revue" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Réviseur" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Champ du réviseur" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Groupe des réviseurs" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Réviseurs" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Revues" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Utilisateur spécifique" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Statut" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "Cette revue a été réinitialisée par %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Définition de niveau" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Formules sur les niveaux" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Revue d'un niveau" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Validation par niveau" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validation d'un niveau (modèle abstrait)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Validation par niveau - Notification - Acceptée" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Validation par niveau - Notification - Rejetée" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Validation par niveau - Demandée" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Validation par niveau - Redémarrée" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Validations par niveau" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Message de demande de validation" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "À faire par" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "À faire par" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Utilisateur" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Champs réviseur valides" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Valider" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Validation / Rejet" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Validé" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Message de validation" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Validé par" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Date de validation" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Date de validation formatée" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validations" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "par ex Niveau de validation pour..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Le champ sélectionné ne référence pas des res.users" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Activité" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "L'opération a été rejetée." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "L'opération a été validée !" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "%s : Cet enregistrement requiert une validation" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Cette action requiert une validation pour au moins un des " +#~ "enregistrements. \n" +#~ "Veuillez demander cette validation." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "Cette opération est en cours de validation." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Cet enregistrement.\n" +#~ " requiert une validation" + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " L'opération a été\n" +#~ " rejetée\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " L'opération a été\n" +#~ " validée\n" +#~ " !" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 en attente" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" + +#~ msgid "Option to forward a tier validation to other reviewer, and backward" +#~ msgstr "" +#~ "Option pour transmettre le niveau de validation à un autre réviseur, et " +#~ "inversement" + +#~ msgid "Tier Forward & Backward" +#~ msgstr "Délégation des niveaux" + +#, python-format +#~ msgid "Activities" +#~ msgstr "Activités" + +#~ msgid "Users" +#~ msgstr "Utilisateurs" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "Une vérification a été refusée par {}. ({})" + +#~ msgid "Any user in a specific group." +#~ msgstr "Tout utilisateur d'un groupe spécifique." diff --git a/base_tier_validation/i18n/it.po b/base_tier_validation/i18n/it.po new file mode 100644 index 00000000..3a83bb7b --- /dev/null +++ b/base_tier_validation/i18n/it.po @@ -0,0 +1,1050 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-11-06 13:42+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\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 5.10.4\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Questo record necessita di\n" +" approvazione." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" L'operazione è stata\n" +" rifiutata\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" L'operazione è stata\n" +" approvata\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Nome" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Aggira, se il livello precedente è stato validato dallo stesso " +"revisore" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Un record a revisionare è stato creato da %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "Una revisione è stata richiesta %s giorni fa." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Un'approvazione è stata richiesta da %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Un'approvazione è stata accettata" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Un'approvazione è stata accettata. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "È stata rifiutata una revisione da %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Un'approvazione è stata rifiutata da %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "Un processo di approvazione è ancora aperto per almeno un record." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Attivo" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Tutto" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "Permetti scrittura ai revisori" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "Grupi autorizzati ad utilizzare questa eccezione validazione livello" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Qualunque utente in un gruppo specifico" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Applica a" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Ordine di approvazione specificato da numero sequenza" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Approva salto sequenza" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Approva in sequenza" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Approvato" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "In archivio" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" +"Almeno uno di questi campi deve essere selezionato! Scrivi in valutazione, " +"Scrivi dopo validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Saltato (auto validato), se il livello precedente è stato validato dallo " +"stesso revisore" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Può revisionare" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"\"Può approvare\" sarà attivo se l'approvazione è in sospeso e la\n" +" sequenza di approvazione è archiviata" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Annulla" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Commento" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Wizard Commento" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Commenti" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Azienda" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "Crea una nuova eccezione di validazione!" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definizione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Dominio Definizione" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Descrizione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Visualizza stato" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Dominio" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Eseguito da" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Eseguito da" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Campo in record collegato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "Campi" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Gruppo %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "Gruppi" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Ha commenti" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "Nascondi revisioni" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Se attivata, consente al revisore di lasciare un commento nella revisione." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Se impostata, tutti i possibili revisori saranno avvisati via e-mail quando " +"la definizione è attivata." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Se impostata, tutti i possibili revisori verranno avvisati per e-mail quando " +"questo stato è raggiunto. Utile in uno scenario di approvazione in sequenza. " +"Una notifica di revisione è inviata quando è il turno di revisione." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Se impostata, i revisori verranno avvisati con e-mail quando una revisione " +"relativa a questa definizione viene accettata." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Se impostata, i revisori verranno avvisati con e-mail quando una revisione " +"relativa a questa definizione viene respinta." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Se impostata, i revisori verranno avvisati con e-mail quando una revisione " +"relativa a questa definizione viene riavviata." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "Completamente validato" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "È nel processo di validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "Data ultimo promemoria" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modello" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "Nome modello" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Più Opzioni" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "Nome" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Richiede conferma" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nuovo Livello Approvazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Prossima revisione" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Prossimo: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Nessuna approvazione da fare." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Notifica revisori all'accettazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Notifica Approvatori su Creazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Notifica revisori quando respinta" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Notifica revisori al riavvio" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Notifica i revisori quando passa a \"In sospeso\"" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" +"Numero di giorni dopo i quali un messaggio deve essere inviato per ricordare " +"della valutazione in attesa (0 = nessun promemoria)" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" +"Una volta creato, si può decidere quali campi si vogliono modificare quando " +"il record:" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Opzione per usare una formula python per ottenere revisori e trovare " +"documenti" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "In attesa" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Modello referenziato" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Rifiuta" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Rifiutato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Messaggio di rifiuto" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "ID documento correlato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Modello documento correlato" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Richiedi validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Richiesta da" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Richiesta da" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Res" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Modello res" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Riavvia validazione" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Approvazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Revisore" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Campo approvatore" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Gruppo approvatore" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Revisori" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Revisioni" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "Invia promemoria revisione livello" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "Invia messaggio promemoria per le revisioni in attesa" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Utente specifico" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Stato" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "L'approvazione è stata riavviata da %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" +"Quest'azione deve essere approvata per almeno un record. Approvazioni in " +"sospeso:\n" +" - %s \n" +"Richiedere un'approvazione." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Livello" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Definizione livello" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Formula livello" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Revisione livello" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Conferma livello" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Validazione livello (sintesi)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Notifica Accettazione Livello Approvazione" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "Eccezione validazione livello" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "Eccezioni validazione livello" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Notifica Rifiuto Livello Approvazione" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "Promemoria valutazione livello" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Approvazione Richiesta" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Approvazione Riavviata" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Livelli di Approvazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Messaggio per 'Da validare'" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Incaricati" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Incaricati" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Utente" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "Campo modello valido" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Campo revisore valido" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Approva" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Rifiuta Approvazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Approvato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Messaggio per 'Validato'" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Approvato da" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Data approvazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Data formattata validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Stato validazione" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "Il campo del revisore di convalida deve essere del tipo appropriato" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validazioni" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "In attesa" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Senza validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "Scrivi dopo validazione" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "Scrivi dopo validazione" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "Scrivi in validazione" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "Scrivi in validazione" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"Non è consentito scrivere quei campi dopo la convalida.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Solo quei campi possono essere modificati:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"Non è consentito scrivere quei campi sotto convalida.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Solo quei campi possono essere modificati:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "es. Validazione livello per ..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Non ci sono res.users nel campo selezionato" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Attività" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "L'operazione è stata rifiutata." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "L'operazione è stata validata!" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "Questo %s deve essere approvato" + +#, python-format +#~ msgid "" +#~ "You are not allowed to write those fields after validation.\n" +#~ "- %(not_allowed_fields)s\n" +#~ "\n" +#~ "Only those fields can be modified:\n" +#~ "- %(allowed_fields)s" +#~ msgstr "" +#~ "Non si è abilitati a scrivere questi campi dopo la validazione.\n" +#~ "- %(not_allowed_fields)s\n" +#~ "\n" +#~ "Solo questi campi possono essere modificati:\n" +#~ "- %(allowed_fields)s" + +#, python-format +#~ msgid "" +#~ "You are not allowed to write those fields under validation.\n" +#~ "- %(not_allowed_fields)s\n" +#~ "\n" +#~ "Only those fields can be modified:\n" +#~ "- %(allowed_fields)s" +#~ msgstr "" +#~ "Non si è abilitati a modificare questi campi in validazione.\n" +#~ "- %(not_allowed_fields)s\n" +#~ "\n" +#~ "Solo questi campi possono essere modificati:\n" +#~ "- %(allowed_fields)s" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Questa azione richiede di essere approvata per almeno un record.\n" +#~ "Prego richiedere un'approvazione." + +#~ msgid "Model" +#~ msgstr "Modello" + +#, python-format +#~ msgid "" +#~ "The model already exists for this company with this Write Validation " +#~ "configuration!" +#~ msgstr "" +#~ "Il modello esiste già per questa azienda con questa configurazione di " +#~ "scrittura validazione!" + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "L'operazione è sotto approvazione." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Questo Record necessita di\n" +#~ " approvazione." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " L'operazione è stata\n" +#~ " rifiutata\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " L'operazione è stata\n" +#~ " approvata\n" +#~ " !" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 In attesa" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima Modifica il" + +#, python-format +#~ msgid "Activities" +#~ msgstr "Attività" + +#~ msgid "Users" +#~ msgstr "Utenti" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "Un'approvazione è stata rifiutata da {}. ({})" diff --git a/base_tier_validation/i18n/nl.po b/base_tier_validation/i18n/nl.po new file mode 100644 index 00000000..96229640 --- /dev/null +++ b/base_tier_validation/i18n/nl.po @@ -0,0 +1,938 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-06-20 22:25+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: 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" +"X-Generator: Weblate 5.10.4\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Dit Record dient te worden\n" +" beoordeeld." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" Aanvraag is \n" +" afgewezen\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" Aanvraag is\n" +" Gevalideerd\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Naam" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Overslaan, indien het vorige niveau door dezelfde beoordelaar is " +"gevalideerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Een record dat beoordeeld moet worden, is aangemaakt door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "Een beoordeling is %s dagen geleden aangevraagd." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Een beoordeling is aangevraagd door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Een beoordeling is geaccepteerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Een beoordeling is geaccepteerd. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "Een beoordeling is afgewezen door %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Een beoordeling is afgewezen door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "Er is nog een validatieproces open voor ten minste één record." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Actief" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Alle" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "Schrijven toestaan voor beoordelaars" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "Toegestane groepen om deze Tier Validatie Uitzondering te gebruiken" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Elke gebruiker in een specifieke groep" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Toepassen op" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Goedkeuringsvolgorde op basis van het opgegeven volgnummer" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Goedkeuringsvolgorde Omzeilen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Goedkeuren op volgorde" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Goedgekeurd" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "Gearchiveerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" +"Minstens één van deze velden moet aangevinkt zijn! Schrijven tijdens " +"Validatie, Schrijven na Validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Overgeslagen (automatisch gevalideerd), indien het vorige niveau door " +"dezelfde beoordelaar is gevalideerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Kan Beoordelen" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"Kan beoordelen wordt gemarkeerd als de beoordeling in behandeling is en de\n" +" goedkeuringssequentie is bereikt" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Annuleren" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Opmerking" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Opmerking Wizard" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Opmerkingen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Bedrijf" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie Instellingen" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "Maak een nieuwe Validatie Uitzondering aan!" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definitie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Definitiedomein" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Omschrijving" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Weergavestatus" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Domein" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Gedaan door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Gedaan door" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Veld in gerelateerd record" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "Velden" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Groep %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Groeperen op" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "Groepen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Heeft opmerking" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "Verberg Beoordelingen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Indien ingesteld, staat de beoordelaar toe een opmerking achter te laten bij " +"de beoordeling." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Indien ingesteld, worden alle mogelijke beoordelaars per e-mail op de hoogte " +"gebracht wanneer deze definitie wordt geactiveerd." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Indien ingesteld, worden alle mogelijke beoordelaars per e-mail op de hoogte " +"gebracht wanneer deze status is bereikt. Handig in een 'Goedkeuren op " +"volgorde' scenario. Een verzoek om beoordeling wordt verstuurd wanneer zij " +"aan de beurt zijn om te beoordelen." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer een beoordeling met betrekking tot deze definitie wordt geaccepteerd." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer een beoordeling met betrekking tot deze definitie wordt afgewezen." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer beoordelingen met betrekking tot deze definitie opnieuw worden " +"gestart." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "Het is volledig gevalideerd" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "Het bevindt zich in het validatieproces" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "Datum laatste herinnering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Model" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "Model naam" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Meer Opties" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "Naam" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Validatie nodig" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nieuwe Tier-validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Volgende Beoordeling" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Volgende: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Geen beoordelingen te doen." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Breng reviewers op de hoogte indien geaccepteerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Informeer beoordelaar bij het maken" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Waarschuw reviewers bij afwijzing" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Waarschuw reviewers bij herstart" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Informeer reviewers over het bereiken van de status In behandeling" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" +"Aantal dagen waarna een bericht moet worden geplaatst om te herinneren aan " +"de in behandeling zijnde validatie (0 = geen herinnering)" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" +"Nadat u het record hebt aangemaakt, kunt u bepalen welke velden u bewerkbaar " +"wilt maken wanneer het record:" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Optie om pythonformule te gebruiken om beoordelaars te krijgen en documenten " +"te vinden" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "In afwachting" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Referentiemodel" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Weiger" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Afgekeurd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Afgewezen bericht" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "Gerelateerde document-ID" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Verwant documentmodel" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Verzoek tot validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Aangevraagd door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Aangevraagd door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Res" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Res model" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Herstart Validatie" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Beoordeling" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Beoordelaar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Beoordelaar veld" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Beoordeel groep" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Beoordelaars" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Beoordelingen" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "Verzend Tier Beoordeling Herinnering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "Stuur herinneringsbericht voor openstaande beoordelingen" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Specifieke gebruiker" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Status" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "De beoordeling is opnieuw ingesteld door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" +"Deze actie moet worden gevalideerd voor ten minste één record. Beoordelingen " +"in afwachting:\n" +" - %s \n" +"Vraag alstublieft een validatie aan." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Niveau" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Niveau Definitie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Niveau Formule" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Niveau Beoordeling" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Niveau Validatie" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Niveau Validatie (abstract)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Niveau Validatie Geaccepteerd Notificatie" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "Niveau Validatie Uitzondering" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "Niveau Validatie Uitzonderingen" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Niveau Validatie Afgewezen Notificatie" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "Niveau Validatie Herinnering" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Niveau Validatie Aangevraagd" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Niveau Validatie Herstart" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Niveau Validaties" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Te Valideren Bericht" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Te Doen Door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Te doen door" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "Geldig Modelveld" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Geldig Beoordelaarsveld" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Valideren" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Valideren Weigeren" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Gevalideerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Gevalideerd Bericht" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Gevalideerd door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Validatiedatum" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Validatie Datum" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Validatiestatus" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validaties" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "Wachtend" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Zonder validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "Schrijven na Validatie" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "Schrijven na validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "Schrijven tijdens Validatie" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "Schrijven tijdens validatie" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"U mag deze velden niet schrijven na validatie.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Alleen deze velden kunnen worden gewijzigd:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"U mag deze velden niet schrijven tijdens validatie.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Alleen deze velden kunnen worden gewijzigd:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "bijv. Niveau Validatie voor..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Er zijn geen res.users in het geselecteerde veld" diff --git a/base_tier_validation/i18n/nl_NL.po b/base_tier_validation/i18n/nl_NL.po new file mode 100644 index 00000000..efb4b172 --- /dev/null +++ b/base_tier_validation/i18n/nl_NL.po @@ -0,0 +1,992 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-02-04 21:02+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\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" +"X-Generator: Weblate 5.6.2\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Dit Record dient te worden\n" +" beoordeeld." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" Aanvraag is \n" +" afgewezen\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" Aanvraag is\n" +" Gevalideerd\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Naam" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Overslaan, indien het vorige niveau door dezelfde beoordelaar is " +"gevalideerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Een record dat beoordeeld moet worden, is aangemaakt door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "Een beoordeling is %s dagen geleden aangevraagd." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Een beoordeling is aangevraagd door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Een beoordeling is geaccepteerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Een beoordeling is geaccepteerd. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "Een beoordeling is afgewezen door %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Een beoordeling is afgewezen door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "Er is nog een validatieproces open voor ten minste één record." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Actief" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Alle" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "Schrijven toestaan voor beoordelaars" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "Toegestane groepen om deze Tier Validatie Uitzondering te gebruiken" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Elke gebruiker in een specifieke groep" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Toepassen op" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Goedkeuringsvolgorde op basis van het opgegeven volgnummer" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Beoordeel volgorde omzeilen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Goedkeuren op volgorde" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Goedgekeurd" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "gearchiveerd" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" +"Minstens één van deze velden moet aangevinkt zijn! Schrijven tijdens " +"Validatie, Schrijven na Validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Overgeslagen (automatisch gevalideerd), als het vorige niveau door dezelfde " +"beoordelaar is gevalideerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Kan beoordelen" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"Kan beoordelen wordt gemarkeerd als de beoordeling in behandeling is en de\n" +" goedkeuringssequentie is bereikt" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Annuleer" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Opmerking" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Opmerking Wizard" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Opmerkingen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Bedrijf" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie Instellingen" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "Maak een nieuwe Validatie Uitzondering aan!" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Bedrijf" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Aangemaakt door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definitie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Definitiedomein" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Omschrijving" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Weergavestatus" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Domein" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Gedaan door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Gedaan door" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Veld in verwante record" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "Velden" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Groep %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Groeperen op" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "Groepen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Heeft commentaar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "Verberg Beoordelingen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Indien ingesteld, staat de beoordelaar toe een opmerking achter te laten bij " +"de beoordeling." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Indien ingesteld, worden alle mogelijke reviewers per e-mail op de hoogte " +"gebracht wanneer deze definitie wordt geactiveerd." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Indien ingesteld, worden alle mogelijke beoordelaars per e-mail op de hoogte " +"gebracht wanneer deze status is bereikt. Handig in een 'Goedkeuren op " +"volgorde' scenario. Een verzoek om beoordeling wordt verstuurd wanneer zij " +"aan de beurt zijn om te beoordelen." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer een beoordeling met betrekking tot deze definitie wordt geaccepteerd." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer een beoordeling met betrekking tot deze definitie wordt afgewezen." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Indien ingesteld, worden beoordelaars per e-mail op de hoogte gebracht " +"wanneer beoordelingen met betrekking tot deze definitie opnieuw worden " +"gestart." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "Het is volledig gevalideerd" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "Het bevindt zich in het validatieproces" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "Datum laatste herinnering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Model" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "Model naam" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Meer Opties" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "Naam" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Validatie nodig" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Nieuwe Tier-validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Volgende Beoordeling" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Volgende: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Geen beoordelingen te doen." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Breng reviewers op de hoogte indien geaccepteerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Informeer beoordelaar bij het maken" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Waarschuw reviewers bij afwijzing" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Waarschuw reviewers bij herstart" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Informeer reviewers over het bereiken van de status In behandeling" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" +"Aantal dagen waarna een bericht moet worden geplaatst om te herinneren aan " +"de in behandeling zijnde validatie (0 = geen herinnering)" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" +"Nadat u het record hebt aangemaakt, kunt u bepalen welke velden u bewerkbaar " +"wilt maken wanneer het record:" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Optie om pythonformule te gebruiken om beoordelaars te krijgen en documenten " +"te vinden" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "In afwachting" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Referentiemodel" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Weiger" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Afgekeurd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Afgewezen bericht" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "Gerelateerde document-ID" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Verwant documentmodel" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Verzoek valideren" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Aangevraagd door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Aangevraagd door" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Res" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Res model" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Herstart Beoordeling" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Beoordeling" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Beoordelaar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Beoordelaar veld" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Beoordeel groep" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Beoordelaars" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Beoordelingen" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "Verzend Tier Beoordeling Herinnering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "Stuur herinneringsbericht voor openstaande beoordelingen" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Specifieke gebruiker" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Status" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "De beoordeling is opnieuw gestart door %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" +"Deze actie moet worden gevalideerd voor ten minste één record. Beoordelingen " +"in afwachting:\n" +" - %s \n" +"Vraag alstublieft een validatie aan." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Tier" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Tier definitie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Niveau Formule" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Tier beoordeling" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Niveauvalidatie" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Tier-validatie (abstract)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Tier-validatie (abstract)" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "Niveau Validatie Uitzondering" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "Niveau Validatie Uitzonderingen" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Tier-validatie (abstract)" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "Niveau Validatie Herinnering" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Niveau Validatie Aangevraagd" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Niveauvalidatie opnieuw gestart" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Tier-validaties" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Bericht valideren" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Te doen door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Te doen door" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "Geldig Modelveld" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Geldig beoordelaarsveld" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Valideer" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Valideren weigeren" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Gevalideerd" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Gevalideerd bericht" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Gevalideerd door" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Validatie datum" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Validatie Datum" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Validatie Status" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Validaties" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "Wachtend" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Zonder validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "Schrijven na Validatie" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "Schrijven na validatie" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "Schrijven tijdens Validatie" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "Schrijven tijdens validatie" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"U mag deze velden niet schrijven na validatie.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Alleen deze velden kunnen worden gewijzigd:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"U mag deze velden niet schrijven tijdens validatie.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Alleen deze velden kunnen worden gewijzigd:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "bijv. Tier validatie voor..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Er zijn geen res.users in het geselecteerde veld" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Activiteit" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "Operatie is afgewezen." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "Operation has been Goedgekeurd!" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "Dit %s dient te worden beoordeeld" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Deze actie moet voor ten minste één record gevalideerd worden.\n" +#~ "Vraag een validatie aan." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "De bewerking is onder validatie." + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 In afwachting" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst gewijzigd op" + +#, fuzzy, python-format +#~ msgid "Activities" +#~ msgstr "Actief" + +#~ msgid "Users" +#~ msgstr "Gebruikers" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "Een beoordeling is afgewezen door {}. ({})" + +#~ msgid "Any user in a specific group." +#~ msgstr "Elke gebruiker in een specifieke groep." + +#~ msgid "Object" +#~ msgstr "Object" + +#~ msgid "Approve Sequence" +#~ msgstr "Volgorde goedkeuren" diff --git a/base_tier_validation/i18n/sv.po b/base_tier_validation/i18n/sv.po new file mode 100644 index 00000000..d7d4ff13 --- /dev/null +++ b/base_tier_validation/i18n/sv.po @@ -0,0 +1,1014 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-12 12:39+0000\n" +"Last-Translator: jakobkrabbe \n" +"Language-Team: none\n" +"Language: sv\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_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Denna post behöver\n" +" bekräftas." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" Operationen har blivit\n" +" avslås\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" Operationen har blivit\n" +" bekräftad\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Namn" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Hoppa över, om föregående nivå bekräftades av samma granskare" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "En post som ska granskas har skapats av %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "En granskning har begärts av %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "En granskning accepterades" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "En granskning accepterades. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "En recension avvisades av %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "En granskning nekades av %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "En valideringsprocess är fortfarande öppen för minst en post." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Aktiv" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Alla" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Alla användare i en specifik grupp" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Applicera på" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Godkännandeordning enligt angivet sekvensnummer" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Godkänna förbikoppling av sekvens" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Godkänn efter sekvens" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Godkänd" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "Arkiverad" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Förbigås (bekräftas automatiskt), om föregående nivå bekräftades av samma " +"granskare" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Kan granska" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"Kan granska kommer att vara ikryssad om granskningen är väntande och\n" +" godkännandesekvensen har uppnåtts" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "Avbryt" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Kommentar" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Kommentarsguide" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Kommentarer" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Bolag" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationsinställningar" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Definition" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Definitionsdomän" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Beskrivning" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Visa status" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Domän" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Gjord av" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Gjord av" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "Fält i relaterad post" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Grupp %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Gruppera efter" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Har kommentar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "Dölj recensioner" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" +"Om inställd, Tillåt granskaren att lämna en kommentar till granskningen." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Om den är inställd kommer alla möjliga granskare att meddelas via e-post när " +"denna definition aktiveras." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Om den är inställd kommer alla möjliga granskare att meddelas via e-post när " +"den här statusen uppnås.Användbar i ett Approve by sequence-scenario. Ett " +"meddelande med en begäran om granskning skickas ut när det är deras tur att " +"granska." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Om den är inställd kommer granskare att meddelas via e-post när en " +"granskning som är relaterad till denna definition accepteras." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Om den är inställd kommer granskare att meddelas via e-post när en " +"granskning som är relaterad till denna definition avvisas." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Om den är inställd kommer granskare att meddelas via e-post när en " +"granskning som är relaterad till denna definition startas om." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modell" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Fler alternativ" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Behöver validering" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Ny attestering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Nästa granskning" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Nästa: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Inga granskningar att göra." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Meddela granskare om accepterad" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "Meddela granskare vid skapande" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Meddela granskare om avvisade" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Meddela granskare vid omstart" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Meddela granskare om att nå Pending" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Alternativ för att använda python-formel för att få fram granskare och hitta " +"dokument" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "Väntande" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Refererad modell" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Neka" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Nekad" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Avvisat meddelande" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "ID för relaterat dokument" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "Modell för relaterat dokument" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Begär validering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "Begärd av" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "Begärd av" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Res" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Res modell" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Starta om validering" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "Granska" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "Granskare" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "Granskarfält" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "Granskargrupp" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "Granskare" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "Granskningar" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Sekvens" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Specifik användare" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Status" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "Granskningen har återställts av %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Djur" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Attestdefinition" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Attestformel" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Attestgranskning" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Attestering" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Attestering (sammanfattning)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Meddelande vid accepterad attestering" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Meddelande vid nekad attestering" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Attestering begärd" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Attestering omstartad" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Attesteringar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "För att validera meddelandet" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Att göra av" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Att göra av" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Användare" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Giltigt fält för granskare" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Validera" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Validera Neka" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Validerad" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Validerat meddelande" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Validerad av" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Valideringsdatum" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Validering Formated Date" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Status för validering" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Valideringar" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "Väntar på" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Utan validering" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "t.ex. attestvalidering för..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Det finns inga res.users i det valda fältet" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Aktivitet" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "Operationen har avslagits." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "Operationen har validerats!" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "Denna %s måste bekräftas" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Denna åtgärd måste bekräftas för minst en post.\n" +#~ "Vänligen begär en validering." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "Åtgärden håller på att bekräftas." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Den här posten måste\n" +#~ " valideras." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " Åtgärden har\n" +#~ " nekats\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " Åtgärden har\n" +#~ " validerats\n" +#~ " !" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 väntande" + +#~ msgid "Last Modified on" +#~ msgstr "Senast ändrad den" + +#~ msgid "Option to forward a tier validation to other reviewer, and backward" +#~ msgstr "" +#~ "Alternativ för att vidarebefordra en attestering till en annan granskare " +#~ "och bakåt" + +#~ msgid "Tier Forward & Backward" +#~ msgstr "Attest framåt och bakåt" + +#, python-format +#~ msgid "Activities" +#~ msgstr "Aktiviteter" + +#~ msgid "More reports about tier validations, i.e., summary of all my reviews" +#~ msgstr "" +#~ "Fler rapporter om attesteringar, dvs. en sammanfattning av alla mina " +#~ "granskningar" + +#~ msgid "Option to trigger server actions on completion of tier reviews" +#~ msgstr "" +#~ "Alternativ för att utlösa serveråtgärder när attesteringar har slutförts" + +#~ msgid "Tier Reports" +#~ msgstr "Attestrapporter" + +#~ msgid "Tier Server Action" +#~ msgstr "Attestserveråtgärd" + +#~ msgid "Users" +#~ msgstr "Användare" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "En granskning nekades av {}. ({})" diff --git a/base_tier_validation/i18n/tr.po b/base_tier_validation/i18n/tr.po new file mode 100644 index 00000000..64dce357 --- /dev/null +++ b/base_tier_validation/i18n/tr.po @@ -0,0 +1,998 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-10-30 17:00+0000\n" +"Last-Translator: Betül Öğmen \n" +"Language-Team: none\n" +"Language: tr\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 5.10.4\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Bu kaydın onaylanması\n" +" gerekmektedir." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" İşlem reddedildi\n" +" \n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" İşlem Onaylandı\n" +" \n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Adı" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Önceki aşama aynı inceleyen tarafından doğrulandıysa atlandı" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Gözden geçirilmesi gereken bir kayıt %s tarafından oluşturuldu." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "%s tarafından bir inceleme istendi." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "%s tarafından bir inceleme istendi." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Bir inceleme kabul edildi" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Bir inceleme kabul edildi. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "Bir inceleme %(user)s tarafından reddedildi. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Bir inceleme %s tarafından reddedildi." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "En az bir kayıt için hala bir doğrulama süreci açık." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "Etkin" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "Bütün" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "İnceleyenler için yazmaya izin ver" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "Grupların bu Katman Doğrulama İstisnasını kullanmasına izin verildi" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "Belirli bir gruptaki herhangi bir kullanıcı" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "Uygula" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "Belirtilen sıra numarasına göre onay sırası" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "Dizi Atlamasını Onayla" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "Sıraya göre onayla" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "Onaylı" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "Arşivlendi" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" +"Bu alanlardan en az birinin işaretlenmesi gerekmektedir! Doğrulama Altında " +"Yaz, Doğrulama Sonrası Yaz\"" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" +"Önceki aşama aynı inceleyici tarafından doğrulandıysa atlandı (otomatik " +"olarak doğrulandı)" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "Gözden Geçirebilir" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" +"İnceleme beklemedeyse ve gözden geçirilebilirse işaretlenebilir.\n" +" onay dizisi elde edildi" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "İptal" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "Yorum" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "Yorum Sihirbazı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "Yorumlar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "Şirket" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "Yeni bir Doğrulama İstisnası oluştur!" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "Oluşturulma" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "Tanım" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "Tanım Etki Alanı" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "Açıklama" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "Durumu Göster" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "Etki Alanı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "Tamamlayan" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "Tamamlayan" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "İlgili kayıttaki alan" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "Alanlar" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "Grup %s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "Grupla" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "Gruplar" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "Yorum Var" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "İncelemeleri Gizle" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "Ayarlanırsa, İnceleyenin inceleme üzerinde yorum yapmasına izin ver." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" +"Ayarlanırsa, bu tanım tetiklendiğinde tüm olası gözden geçirenler e-posta " +"ile bilgilendirilecektir." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" +"Ayarlanırsa, bu duruma ulaşıldığında tüm olası inceleyenler e-posta ile " +"bildirilecektir. Sıraya göre onay senaryosunda kullanışlıdır. İnceleme " +"sırası kendilerine geldiğinde bir inceleme isteği gönderilir." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" +"Ayarlanırsa, bu tanımla ilgili bir inceleme kabul edildiğinde inceleyiciler " +"e-postayla bilgilendirilecektir." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" +"Ayarlanırsa, bu tanımla ilgili bir inceleme reddedildiğinde inceleyiciler e-" +"postayla bilgilendirilecektir." + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" +"Ayarlanırsa, bu tanımla ilgili bir inceleme yeniden başlatıldığında " +"inceleyiciler e-postayla bilgilendirilecektir." + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "Tamamen Doğrulandı" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "Doğrulama Aşamasında" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "Son Bilgilendirme Tarihi" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "Modeli" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "Model İsmi" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "Daha Fazla Seçenek" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "İsim" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "Doğrulama Gerekiyor" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "Yeni Seviye Doğrulama" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "Sonraki İnceleme" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "Sonraki: %s" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "Yapacak inceleme yok." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "Kabul Edilenleri İnceleyicilere Bildir" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "İncelemeleri Oluşturma Hakkında Bilgilendir" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "Red Edilenleri İnceleyicilere Bildir" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "Yeniden Başlatmayı İnceleyicilere Bildir" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "Bekleme Durumuna ulaştıklarında İnceleyicilere Bildir" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" +"Bekleyen doğrulamayı hatırlatmak için bir mesajın gönderilmesi gereken gün " +"sayısı (0 = hatırlatma yok)" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" +"Oluşturulduktan sonra, kayıt sırasında hangi alanların düzenlenebilir " +"olmasını istediğinize karar verebilirsiniz:" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" +"Gözden geçirenleri almak ve belgeleri bulmak için python formülünü kullanma " +"seçeneği" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "Bekleyen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "Referans Model" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "Reddet" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "Reddedildi" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "Reddedilen Mesaj" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "İlgili Belge ID" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "İlgili Belge Modeli" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "Doğrulama İste" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "İsteyen" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "İsteyen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "Temsilci" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "Res Model" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "Yeniden Doğrulama İste" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "İncele" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "İnceleyen" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "İnceleme alanı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "İnceleme grubu" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "İnceleyenler" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "İncelemeler" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "Katman İnceleme Hatırlatıcısı Gönder" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "Bekleyen incelemelerle ilgili hatırlatma mesajı gönder" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "Sıra" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "Belirli kullanıcı" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "Durumu" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "İnceleme %s tarafından sıfırlandı." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" +"Bu eylemin en az bir kayıt için doğrulanması gerekir. İnceleme bekliyor:\n" +" - %s \n" +"Lütfen doğrulama isteğinde bulunun." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "Seviye" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "Seviye Tanımı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "Seviye Formülü" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "Seviye İncelemesi" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "Katman Doğrulama" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "Seviye Doğrulaması (özet)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "Seviye Doğrulama Kabul Bildirimi" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "Katman Doğrulama İstisnası" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "Katman Doğrulama İstisnaları" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "Seviye Doğrulaması Reddedildi Bildirimi" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "Katman Doğrulama Hatırlatıcısı" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "Seviye Doğrulaması İstendi" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "Seviye Doğrulaması Yeniden Başlatıldı" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "Seviye Doğrulamaları" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "Mesajı Doğrulamak İçin" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "Yapılacak" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "Yapılacak" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "Kullanıcı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "Geçerli Model Alanı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "Geçerli İnceleme Alanı" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "Doğrula" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "Reddetmeyi Doğrula" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "Doğrulandı" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "Doğrulanmış Mesaj" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "Doğrulayan" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "Doğrulama Tarihi" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "Doğrulama Format Tarihi" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "Doğrulama Durumu" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "Doğrulama gözden geçiren alanı uygun türde olmalıdır" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "Doğrulamalar" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "Bekleyenler" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "Doğrulama olmadan" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "Doğrulamadan sonra Yaz" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "Doğrulamadan sonra yaz" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "Doğrulama esnasında Yaz" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "Doğrulama esnasında yaz" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"Doğrulamadan sonra bu alanları yazmanıza izin verilmez.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Yalnızca bu alanlar değiştirilebilir:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" +"Doğrulamadan sonra bu alanları yazmanıza izin verilmez.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Yalnızca bu alanlar değiştirilebilir:\n" +"- %(allowed_fields_str)s" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "ör. Şunun için Seviye Doğrulaması..." + +#~ msgid "There are no res.users in the selected field" +#~ msgstr "Seçili alanda res.kullanıcı yok" + +#, python-format +#~ msgid "Activity" +#~ msgstr "Aktivite" + +#, python-format +#~ msgid "Operation has been rejected." +#~ msgstr "İşlem reddedildi." + +#, python-format +#~ msgid "Operation has been validated!" +#~ msgstr "İşlem doğrulandı!" + +#, python-format +#~ msgid "This %s needs to be validated" +#~ msgstr "Bu %s 'nin doğrulanması gerekiyor" + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "Bu eylemin en az bir kayıt için doğrulanması gerekir.\n" +#~ "Lütfen doğrulama isteğinde bulunun." + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "İşlem doğrulama aşamasındadır." + +#~ msgid "" +#~ "\n" +#~ " This Record needs to be\n" +#~ " validated." +#~ msgstr "" +#~ "\n" +#~ " Bu kaydın olması gerekiyor\n" +#~ " doğrulandı." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " rejected\n" +#~ " ." +#~ msgstr "" +#~ "\n" +#~ " operasyon yapıldı\n" +#~ " reddedildi\n" +#~ " ." + +#~ msgid "" +#~ "\n" +#~ " Operation has been\n" +#~ " validated\n" +#~ " !" +#~ msgstr "" +#~ "\n" +#~ " operasyon yapıldı\n" +#~ " doğrulandı\n" +#~ " !" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 Bekleyen" + +#~ msgid "Last Modified on" +#~ msgstr "Son Düzenleme" diff --git a/base_tier_validation/i18n/vi_VN.po b/base_tier_validation/i18n/vi_VN.po new file mode 100644 index 00000000..99e64c83 --- /dev/null +++ b/base_tier_validation/i18n/vi_VN.po @@ -0,0 +1,897 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-04-04 12:06+0000\n" +"Last-Translator: ductdm \n" +"Language-Team: none\n" +"Language: vi_VN\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 5.10.2\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" +"\n" +" Bản ghi này cần được\n" +" xác thực." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" +"\n" +" Hoạt động đã bị\n" +" từ chối\n" +" ." + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" +"\n" +" Hoạt động này đã được\n" +" xác thực\n" +" !" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "Tên" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" +"Bỏ qua, nếu cấp độ trước đó đã được xác thực bởi cùng một người xem " +"xét" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "Một bản ghi cần được xem xét đã được tạo bởi %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "Một yêu cầu xem xét đã được tạo %s ngày trước." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "Một yêu cầu xem xét đã được tạo bởi %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "Yêu cầu xem xét đã được chấp nhận" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "Yêu cầu xem xét đã được chấp nhận. (%s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "Yêu cầu xem xét đã bị từ chối bởi %(user)s. (%(comment)s)" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "Yêu cầu xem xét đã bị từ chối bởi %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "Quá trình xác thực vẫn mở cho ít nhất một bản ghi." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "Đánh giá đã được thiết lập lại bởi %s." + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" +"Hành động này cần được xác thực cho ít nhất một bản ghi. Đang chờ đánh giá:\n" +" - %s \n" +"Please request a validation." + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +msgid "Tier Validation Accepted Notification" +msgstr "" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +msgid "Tier Validation Rejected Notification" +msgstr "" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "" diff --git a/base_tier_validation/i18n/zh_CN.po b/base_tier_validation/i18n/zh_CN.po new file mode 100644 index 00000000..21f90865 --- /dev/null +++ b/base_tier_validation/i18n/zh_CN.po @@ -0,0 +1,927 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_tier_validation +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-09-24 18:00+0000\n" +"Last-Translator: Dong \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 3.10\n" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" This Record needs to be\n" +" validated." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" rejected\n" +" ." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "" +"\n" +" Operation has been\n" +" validated\n" +" !" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Name" +msgstr "名称" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Bypass, if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A record to be reviewed has been created by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "A review has been requested %s days ago." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review has been requested by %s." +msgstr "%s 发起审批请求。" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted" +msgstr "审批已通过" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was accepted. (%s)" +msgstr "审批已通过。 ( %s )" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %(user)s. (%(comment)s)" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A review was rejected by %s." +msgstr "%s 驳回了审批。" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "A validation process is still open for at least one record." +msgstr "当前记录存在待批复的审批流程。" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__active +msgid "Active" +msgstr "有效" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "All" +msgstr "所有" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__allow_write_for_reviewer +msgid "Allow Write For Reviewers" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Allowed groups to use this Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__group +msgid "Any user in a specific group" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Apply On" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence +msgid "Approval order by the specified sequence number" +msgstr "审批按指定序号排序" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "Approve Sequence Bypass" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__approve_sequence +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__approve_sequence +msgid "Approve by sequence" +msgstr "按顺序审批" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__approved +msgid "Approved" +msgstr "已批准" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Archived" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation_exception.py:0 +msgid "" +"At least one of these fields must be checked! Write under Validation, Write " +"after Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__approve_sequence_bypass +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__approve_sequence_bypass +msgid "" +"Bypassed (auto validated), if previous tier was validated by same reviewer" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__can_review +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__can_review +msgid "Can Review" +msgstr "可审批" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_review__can_review +msgid "" +"Can review will be marked if the review is pending and the\n" +" approve sequence has been achieved" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Cancel" +msgstr "取消" + +#. module: base_tier_validation +#. odoo-javascript +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__has_comment +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__has_comment +#: model_terms:ir.ui.view,arch_db:base_tier_validation.view_comment_wizard +msgid "Comment" +msgstr "审批意见" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_comment_wizard +msgid "Comment Wizard" +msgstr "审批意见向导" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__comment +msgid "Comments" +msgstr "审批意见" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__company_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__company_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Company" +msgstr "公司" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "Create a new Validation Exception!" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__create_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__create_date +msgid "Created on" +msgstr "创建时间" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__definition_id +msgid "Definition" +msgstr "定义类型" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__definition_domain +msgid "Definition Domain" +msgstr "定义域" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__name +msgid "Description" +msgstr "说明" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__display_status +msgid "Display Status" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__definition_type__domain +msgid "Domain" +msgstr "域" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__done_by +msgid "Done By" +msgstr "审批人" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Done by" +msgstr "审批人" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__field +msgid "Field in related record" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__field_ids +msgid "Fields" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Group %s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +msgid "Group By" +msgstr "分组" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__group_ids +msgid "Groups" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__has_comment +msgid "Has Comment" +msgstr "含审批意见" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__hide_reviews +msgid "Hide Reviews" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__id +msgid "ID" +msgstr "ID" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_validation__has_comment +msgid "If set, Allow the reviewer to leave a comment on the review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_create +msgid "" +"If set, all possible reviewers will be notified by email when this " +"definition is triggered." +msgstr "如果设置,则触发此定义规则时将通过电子邮件通知所有的审批人。" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_pending +msgid "" +"If set, all possible reviewers will be notified by email when this status is " +"reached.Usefull in an Approve by sequence scenario. An notification request " +"to review is sent out when it's their turn to review." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is accepted." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "" +"If set, reviewers will be notified by email when a review related to this " +"definition is rejected." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "" +"If set, reviewers will be notified by email when a reviews related to this " +"definition are restarted." +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's fully validated" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "It's in the validation process" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__last_reminder_date +msgid "Last Reminder Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_uid +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_uid +msgid "Last Updated by" +msgstr "最近更新人" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__write_date +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__write_date +msgid "Last Updated on" +msgstr "最近更新时间" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_id +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_search +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Model" +msgstr "模型" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__model_name +msgid "Model Name" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "More Options" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__name +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__name +msgid "Name" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__need_validation +msgid "Need Validation" +msgstr "需要审批" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_definition.py:0 +msgid "New Tier Validation" +msgstr "新建多层级审批" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__next_review +msgid "Next Review" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "Next: %s" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +msgid "No reviews to do." +msgstr "没有待审批的项目。" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_accepted +msgid "Notify Reviewers on Accepted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_create +msgid "Notify Reviewers on Creation" +msgstr "创建时通知审批人" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_rejected +msgid "Notify Reviewers on Rejected" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_restarted +msgid "Notify Reviewers on Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_on_pending +msgid "Notify Reviewers on reaching Pending" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,help:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "" +"Number of days after which a message must be posted to remind about pending " +"validation (0 = no reminder)" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.actions.act_window,help:base_tier_validation.tier_validation_exception_action +msgid "" +"Once created, you can decide which fields you want to be editable when the " +"record:" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Option to use python formula to get reviewers and find documents" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__pending +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__pending +msgid "Pending" +msgstr "待审批" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__model_id +msgid "Referenced Model" +msgstr "引用模型" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Reject" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__rejected +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__rejected +msgid "Rejected" +msgstr "已驳回" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__rejected_message +msgid "Rejected Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__res_id +msgid "Related Document ID" +msgstr "关联文档 ID" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__model +msgid "Related Document Model" +msgstr "关联文档模型" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Request Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__requested_by +msgid "Requested By" +msgstr "发起人" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Requested by" +msgstr "发起人" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_id +msgid "Res" +msgstr "资源" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__res_model +msgid "Res Model" +msgstr "资源模型" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_buttons +msgid "Restart Validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__review_ids +msgid "Review" +msgstr "审批" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_id +msgid "Reviewer" +msgstr "审批人" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_field_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_field_id +msgid "Reviewer field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__reviewer_group_id +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_group_id +msgid "Reviewer group" +msgstr "审批组" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewer_ids +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__reviewer_ids +msgid "Reviewers" +msgstr "审批者" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml:0 +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_res_users__review_ids +msgid "Reviews" +msgstr "审批" + +#. module: base_tier_validation +#: model:ir.actions.server,name:base_tier_validation.ir_cron_auto_tier_validation_ir_actions_server +msgid "Send Tier Review Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__notify_reminder_delay +msgid "Send reminder message on pending reviews" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__sequence +msgid "Sequence" +msgstr "序号" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_definition__review_type__individual +msgid "Specific user" +msgstr "指定用户" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__status +msgid "Status" +msgstr "状态" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "The review has been reset by %s." +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"This action needs to be validated for at least one record. Reviews pending:\n" +" - %s \n" +"Please request a validation." +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__sequence +msgid "Tier" +msgstr "层级" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_definition_action +#: model:ir.model,name:base_tier_validation.model_tier_definition +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_definition +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "Tier Definition" +msgstr "层级定义" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_res_config_settings__module_base_tier_validation_formula +msgid "Tier Formula" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_review +msgid "Tier Review" +msgstr "多层级审批" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.res_config_settings_view_form_budget +msgid "Tier Validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation +msgid "Tier Validation (abstract)" +msgstr "多层级审批(抽象)" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_accepted +#, fuzzy +msgid "Tier Validation Accepted Notification" +msgstr "多层级审批(抽象)" + +#. module: base_tier_validation +#: model:ir.actions.act_window,name:base_tier_validation.tier_validation_exception_action +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_validation_exception +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_form +msgid "Tier Validation Exception" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_tier_validation_exception +msgid "Tier Validation Exceptions" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_rejected +#, fuzzy +msgid "Tier Validation Rejected Notification" +msgstr "多层级审批(抽象)" + +#. module: base_tier_validation +#: model:mail.activity.type,name:base_tier_validation.mail_act_tier_validation_reminder +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_reminder +msgid "Tier Validation Reminder" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_requested +msgid "Tier Validation Requested" +msgstr "" + +#. module: base_tier_validation +#: model:mail.message.subtype,name:base_tier_validation.mt_tier_validation_restarted +msgid "Tier Validation Restarted" +msgstr "" + +#. module: base_tier_validation +#: model:ir.ui.menu,name:base_tier_validation.menu_tier_confirmation +msgid "Tier Validations" +msgstr "多层级审批" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__to_validate_message +msgid "To Validate Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__todo_by +msgid "Todo By" +msgstr "" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +msgid "Todo by" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model,name:base_tier_validation.model_res_users +msgid "User" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__valid_model_field_ids +msgid "Valid Model Field" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__valid_reviewer_field_ids +msgid "Valid Reviewer Field" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_label +msgid "Validate" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_comment_wizard__validate_reject +msgid "Validate Reject" +msgstr "驳回" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__validated +msgid "Validated" +msgstr "已批准" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validated_message +msgid "Validated Message" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_definition__review_type +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__review_type +msgid "Validated by" +msgstr "审批人" + +#. module: base_tier_validation +#. odoo-javascript +#: code:addons/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml:0 +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_date +msgid "Validation Date" +msgstr "审批日期" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_review__reviewed_formated_date +msgid "Validation Formated Date" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__validation_status +msgid "Validation Status" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_review.py:0 +msgid "Validation reviewer field should be of the appropriate type" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation__review_ids +msgid "Validations" +msgstr "审批" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_review__status__waiting +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__waiting +msgid "Waiting" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields.selection,name:base_tier_validation.selection__tier_validation__validation_status__no +msgid "Without validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_after_validation +msgid "Write after Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write after validation" +msgstr "" + +#. module: base_tier_validation +#: model:ir.model.fields,field_description:base_tier_validation.field_tier_validation_exception__allowed_to_write_under_validation +msgid "Write under Validation" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_validation_exception_search +msgid "Write under validation" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields after validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#. odoo-python +#: code:addons/base_tier_validation/models/tier_validation.py:0 +msgid "" +"You are not allowed to write those fields under validation.\n" +"- %(not_allowed_fields_str)s\n" +"\n" +"Only those fields can be modified:\n" +"- %(allowed_fields_str)s" +msgstr "" + +#. module: base_tier_validation +#: model_terms:ir.ui.view,arch_db:base_tier_validation.tier_definition_view_form +msgid "e.g. Tier Validation for..." +msgstr "例如:审批层级用于..." + +#, python-format +#~ msgid "" +#~ "This action needs to be validated for at least one record. \n" +#~ "Please request a validation." +#~ msgstr "" +#~ "此操作需要至少对一条记录进行审批。\n" +#~ "请发起审批申请。" + +#, python-format +#~ msgid "The operation is under validation." +#~ msgstr "该操作正在审批中。" + +#, python-format +#~ msgid "0 Pending" +#~ msgstr "0 待审批" + +#~ msgid "Last Modified on" +#~ msgstr "最近修改时间" + +#, python-format +#~ msgid "Activities" +#~ msgstr "活动项目" + +#~ msgid "Users" +#~ msgstr "用户" + +#~ msgid "A review was rejected by {}. ({})" +#~ msgstr "{} 驳回了审批。 ( {} )" + +#~ msgid "Any user in a specific group." +#~ msgstr "指定权限组" + +#~ msgid "Object" +#~ msgstr "对象" + +#~ msgid "Approve Sequence" +#~ msgstr "批准顺序" + +#~ msgid "Formula" +#~ msgstr "公式" + +#~ msgid "Python Expression" +#~ msgstr "Python表达式" diff --git a/base_tier_validation/migrations/18.0.2.1.0/pre-migration.py b/base_tier_validation/migrations/18.0.2.1.0/pre-migration.py new file mode 100644 index 00000000..23721254 --- /dev/null +++ b/base_tier_validation/migrations/18.0.2.1.0/pre-migration.py @@ -0,0 +1,82 @@ +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(cr, version): + # Workaround to execute the migration script without errors + # see https://github.com/odoo/odoo/blob/2a839ef1ed09c36f27ce7536ca3052d9f65ceed9/odoo/modules/migration.py#L252-L256 + env = cr + env.cr.execute( + """ + SELECT imf.model + FROM ir_model_fields AS imf + WHERE imf.name = 'review_ids' + AND imf.ttype = 'one2many' + AND imf.model != 'tier.validation' + """ + ) + for (model_name,) in env.cr.fetchall(): + table_name = model_name.replace(".", "_") + # validation_status column + if not openupgrade.column_exists(env.cr, table_name, "validation_status"): + openupgrade.logged_query( + env.cr, + f""" + ALTER TABLE {table_name} + ADD COLUMN IF NOT EXISTS validation_status VARCHAR + """, + ) + openupgrade.logged_query( + env.cr, + f""" + UPDATE {table_name} SET validation_status = 'no' + """, + ) + openupgrade.logged_query( + env.cr, + f""" + UPDATE {table_name} SET validation_status = 'rejected' + WHERE validation_status = 'no' AND id IN ( + SELECT DISTINCT(tr.res_id) + FROM tier_review AS tr + WHERE tr.model = '{model_name}' AND tr.status = 'rejected' + ) + """, + ) + openupgrade.logged_query( + env.cr, + f""" + UPDATE {table_name} SET validation_status = 'pending' + WHERE validation_status = 'no' AND id IN ( + SELECT DISTINCT(tr.res_id) + FROM tier_review AS tr + WHERE tr.model = '{model_name}' AND tr.status = 'pending' + ) + """, + ) + openupgrade.logged_query( + env.cr, + f""" + UPDATE {table_name} SET validation_status = 'waiting' + WHERE validation_status = 'no' AND id IN ( + SELECT DISTINCT(tr.res_id) + FROM tier_review AS tr + WHERE tr.model = '{model_name}' AND tr.status = 'waiting' + ) + """, + ) + openupgrade.logged_query( + env.cr, + f""" + UPDATE {table_name} SET validation_status = 'validated' + WHERE validation_status = 'no' AND id IN ( + SELECT DISTINCT(tr.res_id) + FROM tier_review AS tr + WHERE tr.model = '{model_name}' + AND tr.status IN ('approved', 'forwarded') + ) + """, + ) diff --git a/base_tier_validation/models/__init__.py b/base_tier_validation/models/__init__.py new file mode 100644 index 00000000..5cf03dbb --- /dev/null +++ b/base_tier_validation/models/__init__.py @@ -0,0 +1,8 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import tier_definition +from . import tier_validation_exception +from . import tier_review +from . import tier_validation +from . import res_users +from . import res_config_settings diff --git a/base_tier_validation/models/res_config_settings.py b/base_tier_validation/models/res_config_settings.py new file mode 100644 index 00000000..6ca8844a --- /dev/null +++ b/base_tier_validation/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2021 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + # Activate me back when modules are migrated + + module_base_tier_validation_formula = fields.Boolean(string="Tier Formula") + # module_base_tier_validation_forward = fields.Boolean("Tier Forward & Backward") + # module_base_tier_validation_server_action = fields.Boolean("Tier Server Action") + # module_base_tier_validation_report = fields.Boolean("Tier Reports") diff --git a/base_tier_validation/models/res_users.py b/base_tier_validation/models/res_users.py new file mode 100644 index 00000000..8415a82e --- /dev/null +++ b/base_tier_validation/models/res_users.py @@ -0,0 +1,55 @@ +# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, modules + + +class Users(models.Model): + _inherit = "res.users" + + review_ids = fields.Many2many(string="Reviews", comodel_name="tier.review") + + @api.model + def review_user_count(self): + user_reviews = {} + user = self.env.user + domain = [ + ("status", "=", "pending"), + ("can_review", "=", True), + ("id", "in", user.review_ids.ids), + ] + review_groups = self.env["tier.review"]._read_group( + domain=domain, + groupby=["model"], + aggregates=["id:recordset"], + ) + for model, tier_review in review_groups: + Model = self.env[model] + # Skip Models not having Tier Validation enabled (example: was unistalled) + if tier_review and hasattr(Model, "can_review"): + records_domain = [ + ("id", "in", tier_review.mapped("res_id")), + ("validation_status", "!=", "rejected"), + ("can_review", "=", True), + ] + records = ( + Model.with_user(user) + .with_context(active_test=False) + .search(records_domain) + ) + # Excludes any cancelled records depending on the structure of the model + if Model._state_field in Model._fields: + records = records.filtered( + lambda x: x[x._state_field] != x._cancel_state + ) + if records: + user_reviews[model] = { + "id": records[0].id, + "name": Model._description, + "model": model, + "active_field": "active" in Model._fields, + "icon": modules.module.get_module_icon(Model._original_module), + "type": "tier_review", + "pending_count": len(records), + } + return list(user_reviews.values()) diff --git a/base_tier_validation/models/tier_definition.py b/base_tier_validation/models/tier_definition.py new file mode 100644 index 00000000..7bd7c394 --- /dev/null +++ b/base_tier_validation/models/tier_definition.py @@ -0,0 +1,166 @@ +# Copyright 2017 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class TierDefinition(models.Model): + _name = "tier.definition" + _description = "Tier Definition" + + @api.model + def _get_default_name(self): + return self.env._("New Tier Validation") + + @api.model + def _get_tier_validation_model_names(self): + res = [] + return res + + name = fields.Char( + string="Description", + required=True, + default=lambda self: self._get_default_name(), + translate=True, + ) + model_id = fields.Many2one( + comodel_name="ir.model", + string="Referenced Model", + domain=lambda self: [("model", "in", self._get_tier_validation_model_names())], + ) + model = fields.Char(related="model_id.model", index=True, store=True) + review_type = fields.Selection( + string="Validated by", + default="individual", + selection=[ + ("individual", "Specific user"), + ("group", "Any user in a specific group"), + ("field", "Field in related record"), + ], + ) + allow_write_for_reviewer = fields.Boolean( + string="Allow Write For Reviewers", + default=False, + ) + reviewer_id = fields.Many2one(comodel_name="res.users", string="Reviewer") + reviewer_group_id = fields.Many2one( + comodel_name="res.groups", string="Reviewer group" + ) + reviewer_field_id = fields.Many2one( + comodel_name="ir.model.fields", + string="Reviewer field", + domain="[('id', 'in', valid_reviewer_field_ids)]", + ) + valid_reviewer_field_ids = fields.One2many( + comodel_name="ir.model.fields", + compute="_compute_domain_reviewer_field", + ) + definition_type = fields.Selection( + string="Definition", selection=[("domain", "Domain")], default="domain" + ) + definition_domain = fields.Char() + active = fields.Boolean(default=True) + sequence = fields.Integer(default=30) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self.env.company, + ) + notify_on_create = fields.Boolean( + string="Notify Reviewers on Creation", + help="If set, all possible reviewers will be notified by email when " + "this definition is triggered.", + ) + notify_on_pending = fields.Boolean( + string="Notify Reviewers on reaching Pending", + help="If set, all possible reviewers will be notified by email when " + "this status is reached." + "Usefull in an Approve by sequence scenario. " + "An notification request to review is sent out when it's their turn to review.", + ) + notify_on_accepted = fields.Boolean( + string="Notify Reviewers on Accepted", + help="If set, reviewers will be notified by email when a review related " + "to this definition is accepted.", + ) + notify_on_rejected = fields.Boolean( + string="Notify Reviewers on Rejected", + help="If set, reviewers will be notified by email when a review related " + "to this definition is rejected.", + ) + notify_on_restarted = fields.Boolean( + string="Notify Reviewers on Restarted", + help="If set, reviewers will be notified by email when a reviews related " + "to this definition are restarted.", + ) + has_comment = fields.Boolean(string="Comment", default=False) + notify_reminder_delay = fields.Integer( + string="Send reminder message on pending reviews", + help="Number of days after which a message must be posted to remind about " + "pending validation (0 = no reminder)", + ) + approve_sequence = fields.Boolean( + string="Approve by sequence", + default=False, + help="Approval order by the specified sequence number", + ) + approve_sequence_bypass = fields.Boolean( + help="Bypassed (auto validated), if previous tier was validated " + "by same reviewer", + ) + + @api.onchange("review_type") + def onchange_review_type(self): + self.reviewer_id = None + self.reviewer_group_id = None + + @api.depends("review_type", "model_id") + def _compute_domain_reviewer_field(self): + models = self.mapped("model") + IrModelFields = self.env["ir.model.fields"].sudo() + valid_reviewer_fields = dict( + IrModelFields._read_group( + domain=[ + ("model", "in", models), + "|", + ("relation", "=", "res.users"), + ("relation", "=", "res.groups"), + ], + groupby=["model"], + aggregates=["id:array_agg"], + ) + ) + for rec in self: + rec.valid_reviewer_field_ids = valid_reviewer_fields.get( + rec.model, IrModelFields + ) + + def _get_review_needing_reminder(self): + """Return all the reviews that have the reminder setup.""" + self.ensure_one() + if not self.notify_reminder_delay: + return self.env["tier.review"] + review_date = fields.Datetime.subtract( + fields.Datetime.now(), days=self.notify_reminder_delay + ) + return self.env["tier.review"].search( + [ + ("definition_id", "=", self.id), + ("status", "in", ["waiting", "pending"]), + "|", + "&", + ("create_date", "<", review_date), + ("last_reminder_date", "=", False), + ("last_reminder_date", "<", review_date), + ], + limit=1, + ) + + def _cron_send_review_reminder(self): + definition_with_reminder = self.env["tier.definition"].search( + [("notify_reminder_delay", ">", 0)] + ) + for record in definition_with_reminder: + review_to_remind = record._get_review_needing_reminder() + if review_to_remind: + review_to_remind._send_review_reminder() diff --git a/base_tier_validation/models/tier_review.py b/base_tier_validation/models/tier_review.py new file mode 100644 index 00000000..644189cf --- /dev/null +++ b/base_tier_validation/models/tier_review.py @@ -0,0 +1,208 @@ +# Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import logging + +import pytz + +from odoo import api, fields, models +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class TierReview(models.Model): + _name = "tier.review" + _description = "Tier Review" + + name = fields.Char(related="definition_id.name") + status = fields.Selection( + [ + ("waiting", "Waiting"), + ("pending", "Pending"), + ("rejected", "Rejected"), + ("approved", "Approved"), + ], + default="waiting", + ) + model = fields.Char(string="Related Document Model", index=True) + res_id = fields.Many2oneReference( + string="Related Document ID", + index=True, + model_field="model", + ) + definition_id = fields.Many2one(comodel_name="tier.definition") + company_id = fields.Many2one( + related="definition_id.company_id", + store=True, + ) + review_type = fields.Selection(related="definition_id.review_type") + reviewer_id = fields.Many2one(related="definition_id.reviewer_id") + reviewer_group_id = fields.Many2one(related="definition_id.reviewer_group_id") + reviewer_field_id = fields.Many2one(related="definition_id.reviewer_field_id") + reviewer_ids = fields.Many2many( + string="Reviewers", + comodel_name="res.users", + compute="_compute_reviewer_ids", + store=True, + ) + display_status = fields.Char(compute="_compute_display_status") + sequence = fields.Integer(string="Tier") + todo_by = fields.Char(compute="_compute_todo_by", store=True) + done_by = fields.Many2one(comodel_name="res.users") + requested_by = fields.Many2one(comodel_name="res.users") + reviewed_date = fields.Datetime(string="Validation Date") + reviewed_formated_date = fields.Char( + string="Validation Formated Date", compute="_compute_reviewed_formated_date" + ) + has_comment = fields.Boolean(related="definition_id.has_comment") + comment = fields.Char(string="Comments") + can_review = fields.Boolean( + compute="_compute_can_review", + store=True, + help="""Can review will be marked if the review is pending and the + approve sequence has been achieved""", + ) + approve_sequence = fields.Boolean(related="definition_id.approve_sequence") + approve_sequence_bypass = fields.Boolean( + related="definition_id.approve_sequence_bypass" + ) + last_reminder_date = fields.Datetime(readonly=True) + + @api.depends("status") + def _compute_display_status(self): + """ + Compute the display status based on the current status value to get the + translated status value. + """ + selection = self.fields_get(["status"])["status"]["selection"] + selection_dict = dict(selection) + for record in self: + record.display_status = selection_dict[record.status] + + @api.depends_context("tz") + def _compute_reviewed_formated_date(self): + timezone = self._context.get("tz") or self.env.user.partner_id.tz or "UTC" + for review in self: + if not review.reviewed_date: + review.reviewed_formated_date = False + continue + reviewed_date_utc = pytz.timezone("UTC").localize(review.reviewed_date) + reviewed_date_tz = reviewed_date_utc.astimezone(pytz.timezone(timezone)) + review.reviewed_formated_date = reviewed_date_tz.replace(tzinfo=None) + + @api.depends("definition_id.approve_sequence") + def _compute_can_review(self): + reviews = self.filtered(lambda rev: rev.status in ["waiting", "pending"]) + if reviews: + # get minimum sequence of all to prevent jumps + next_seq = min(reviews.mapped("sequence")) + for record in reviews: + # if approve by sequence, check sequence has been reached + if record.approve_sequence: + if record.sequence == next_seq: + record.status = "pending" + # if there is no approval sequence go directly to pending state + elif not record.approve_sequence: + record.status = "pending" + if record.status == "pending": + if record.definition_id.notify_on_pending: + record._notify_pending_status(record) + for record in self: + record.can_review = record._can_review_value() + + def _can_review_value(self): + if self.status not in ("pending", "waiting"): + return False + if not self.approve_sequence: + return True + resource = self.env[self.model].browse(self.res_id) + reviews = resource.review_ids.filtered(lambda r: r.status == "pending") + if not reviews: + return True + sequence = min(reviews.mapped("sequence")) + return self.sequence == sequence + + @api.model + def _get_reviewer_fields(self): + return ["reviewer_id", "reviewer_group_id", "reviewer_group_id.user_ids"] + + @api.depends(lambda self: self._get_reviewer_fields()) + def _compute_reviewer_ids(self): + for rec in self: + rec.reviewer_ids = rec._get_reviewers() + + @api.depends("reviewer_ids") + def _compute_todo_by(self): + """Show by group or by abbrev list of names""" + num_show = 3 # Max number of users to display + for rec in self: + todo_by = False + if rec.reviewer_group_id: + todo_by = self.env._("Group %s", rec.reviewer_group_id.name) + else: + todo_by = ", ".join(rec.reviewer_ids[:num_show].mapped("display_name")) + num_users = len(rec.reviewer_ids) + if num_users > num_show: + todo_by = f"{todo_by} (and {num_users - num_show} more)" + rec.todo_by = todo_by + + def _get_reviewers(self): + if self.reviewer_id or self.reviewer_group_id.user_ids: + return self.reviewer_id + self.reviewer_group_id.user_ids + if self.reviewer_field_id: + resource = self.env[self.model].browse(self.res_id) + reviewer_field = getattr(resource, self.reviewer_field_id.name, False) + if reviewer_field: + if reviewer_field._name == "res.groups": + return reviewer_field.users + elif reviewer_field._name == "res.users": + return reviewer_field + else: + raise ValidationError( + self.env._( + "Validation reviewer field " + "should be of the appropriate type" + ) + ) + return self.env["res.users"] + + def _notify_pending_status(self, review_ids): + """Method to call and reuse abstract notification method""" + resource = self.env[self.model].browse(self.res_id) + resource._notify_review_available(review_ids) + + def _get_reminder_notification_subtype(self): + return "base_tier_validation.mt_tier_validation_reminder" + + def _get_reminder_activity_type(self): + return "base_tier_validation.mail_act_tier_validation_reminder" + + def _notify_review_reminder_body(self): + delay = (fields.Datetime.now() - self.create_date).days + return self.env._("A review has been requested %s days ago.", delay) + + def _send_review_reminder(self): + record = self.env[self.model].browse(self.res_id) + # Only schedule activity if reviewer is a single user and model has activities + if len(self.reviewer_ids) == 1 and hasattr(record, "activity_ids"): + self._schedule_review_reminder_activity(record) + elif hasattr(record, "message_post"): + self._notify_review_reminder(record) + else: + msg = f"Could not send reminder for record {record}" + _logger.exception(msg) + self.last_reminder_date = fields.Datetime.now() + + def _notify_review_reminder(self, record): + record.message_post( + subtype_xmlid=self._get_reminder_notification_subtype(), + body=self._notify_review_reminder_body(), + ) + + def _schedule_review_reminder_activity(self, record): + record.activity_schedule( + act_type_xmlid=self._get_reminder_activity_type(), + note=self._notify_review_reminder_body(), + user_id=self.reviewer_ids.id, + ) diff --git a/base_tier_validation/models/tier_validation.py b/base_tier_validation/models/tier_validation.py new file mode 100644 index 00000000..caa29d8d --- /dev/null +++ b/base_tier_validation/models/tier_validation.py @@ -0,0 +1,952 @@ +# Copyright 2017-19 ForgeFlow S.L. (https://www.forgeflow.com) +# Copyright 2024 Moduon Team (https://www.moduon.team) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from ast import literal_eval + +from lxml import etree +from psycopg2.extensions import AsIs +from odoo import api, fields, models +from odoo.exceptions import ValidationError +from odoo.tools import SQL +from odoo.tools.misc import frozendict + +BASE_EXCEPTION_FIELDS = [ + "message_follower_ids", + "access_token", + "message_main_attachment_id", +] + + +class TierValidation(models.AbstractModel): + _name = "tier.validation" + _description = "Tier Validation (abstract)" + + _tier_validation_buttons_xpath = "/form/header/button[last()]" + _tier_validation_manual_config = True + _tier_validation_state_field_is_computed = False + _tier_validation_company_field = "company_id" + + _state_field = "state" + _state_from = ["draft"] + _state_to = ["confirmed"] + _cancel_state = "cancel" + + review_ids = fields.One2many( + comodel_name="tier.review", + inverse_name="res_id", + string="Validations", + domain=lambda self: [("model", "=", self._name)], + auto_join=True, + ) + # TODO: Delete in v19 in favor of validation_status field + validated = fields.Boolean( + compute="_compute_validated_rejected", search="_search_validated" + ) + to_validate_message = fields.Html(compute="_compute_to_validate_message") + validated_message = fields.Html(compute="_compute_validated_message") + need_validation = fields.Boolean(compute="_compute_need_validation") + # TODO: Delete in v19 in favor of validation_status field + rejected = fields.Boolean( + compute="_compute_validated_rejected", search="_search_rejected" + ) + rejected_message = fields.Html(compute="_compute_rejected_message") + validation_status = fields.Selection( + selection=[ + ("no", "Without validation"), + ("waiting", "Waiting"), + ("pending", "Pending"), + ("rejected", "Rejected"), + ("validated", "Validated"), + ], + default="no", + compute="_compute_validation_status", + store=True, + ) + reviewer_ids = fields.Many2many( + string="Reviewers", + comodel_name="res.users", + compute="_compute_reviewer_ids", + search="_search_reviewer_ids", + ) + can_review = fields.Boolean( + compute="_compute_can_review", search="_search_can_review" + ) + has_comment = fields.Boolean( + compute="_compute_has_comment", + help="If set, Allow the reviewer to leave a comment on the review.", + ) + next_review = fields.Char(compute="_compute_next_review") + hide_reviews = fields.Boolean(compute="_compute_hide_reviews") + + def _compute_has_comment(self): + for rec in self: + has_comment = rec.review_ids.filtered( + lambda r: r.status in ("waiting", "pending") + and self.env.user in r.reviewer_ids + ).mapped("has_comment") + rec.has_comment = True in has_comment + + def _get_sequences_to_approve(self, user): + all_reviews = self.review_ids.filtered( + lambda r: r.status in ("waiting", "pending") + ) + my_reviews = all_reviews.filtered(lambda r: user in r.reviewer_ids) + # Include all my_reviews with approve_sequence = False + sequences = my_reviews.filtered(lambda r: not r.approve_sequence).mapped( + "sequence" + ) + # Include only my_reviews with approve_sequence = True + approve_sequences = my_reviews.filtered("approve_sequence").mapped("sequence") + if approve_sequences: + my_sequence = min(approve_sequences) + min_sequence = min(all_reviews.mapped("sequence")) + if my_sequence <= min_sequence: + sequences.append(my_sequence) + return sequences + + @api.depends_context("uid") + @api.depends("review_ids.status") + def _compute_can_review(self): + for rec in self: + rec.can_review = rec._get_sequences_to_approve(self.env.user) + + @api.model + def _search_can_review(self, operator, value): + domain = [ + ("review_ids.reviewer_ids", "=", self.env.user.id), + ("review_ids.status", "in", ["pending", "waiting"]), + ("review_ids.can_review", "=", True), + ("validation_status", "!=", "rejected"), + ] + if "active" in self._fields: + domain.append(("active", "in", [True, False])) + res_ids = self.search(domain).filtered("can_review").ids + return [("id", "in", res_ids)] + + @api.depends("review_ids") + def _compute_reviewer_ids(self): + for rec in self: + rec.reviewer_ids = rec.review_ids.filtered( + lambda r: r.status in ("waiting", "pending") + ).mapped("reviewer_ids") + + # TODO: delete in 19.0 migration in favor of validation_status field + @api.model + def _search_validated(self, operator, value): + assert operator in ("=", "!="), "Invalid domain operator" + assert value in (True, False), "Invalid domain value" + operator_equal = (operator == "=" and value) or (operator == "!=" and not value) + return [("validation_status", operator_equal and "=" or "!=", "validated")] + + # TODO: delete in 19.0 migration in favor of validation_status field + @api.model + def _search_rejected(self, operator, value): + assert operator in ("=", "!="), "Invalid domain operator" + assert value in (True, False), "Invalid domain value" + operator_equal = (operator == "=" and value) or (operator == "!=" and not value) + return [("validation_status", operator_equal and "=" or "!=", "rejected")] + + @api.model + def _search_reviewer_ids(self, operator, value): + model_operator = "in" + if operator == "=" and value in ("[]", False): + # Search for records that have not yet been through a validation + # process. + operator = "!=" + model_operator = "not in" + reviews = self.env["tier.review"].search( + [ + ("model", "=", self._name), + ("reviewer_ids", operator, value), + ("can_review", "=", True), + ] + ) + return [("id", model_operator, list(set(reviews.mapped("res_id"))))] + + def _get_to_validate_message_name(self): + return self._description + + def _get_to_validate_message(self): + return f""" {self.env._( + "This %s needs to be validated", + self._get_to_validate_message_name() + )}""" + + def _get_validated_message(self): + msg = f""" {self.env._( + "Operation has been validated!" + )}""" + return self.validation_status == "validated" and msg or "" + + def _get_rejected_message(self): + msg = f""" {self.env._( + "Operation has been rejected." + )}""" + return self.validation_status == "rejected" and msg or "" + + # TODO: delete in 19.0 migration in favor of validation_status field + @api.depends("validation_status") + def _compute_validated_rejected(self): + for rec in self: + for field in ("validated", "rejected"): + rec[field] = rec.validation_status == field + + @api.depends("validation_status") + def _compute_to_validate_message(self): + for rec in self: + rec.to_validate_message = rec._get_to_validate_message() + + def _validated_states(self): + """Override for different validation policy.""" + return ["approved"] + + @api.depends("validation_status") + def _compute_validated_message(self): + for rec in self: + rec.validated_message = rec._get_validated_message() + + def _rejected_states(self): + """Override for different rejected policy.""" + return ["rejected"] + + @api.depends("validation_status") + def _compute_rejected_message(self): + for rec in self: + rec.rejected_message = rec._get_rejected_message() + + @api.depends("review_ids", "review_ids.status") + def _compute_validation_status(self): + validated_states = self._validated_states() + rejected_states = self._rejected_states() + for item in self: + reviews = item.review_ids + any_rejected = any(reviews.filtered(lambda x: x.status in rejected_states)) + any_pending = any(reviews.filtered(lambda x: x.status == "pending")) + any_waiting = any(item.review_ids.filtered(lambda x: x.status == "waiting")) + if reviews and all(x.status in validated_states for x in reviews): + item.validation_status = "validated" + elif any_rejected: + item.validation_status = "rejected" + elif any_pending: + item.validation_status = "pending" + elif any_waiting: + item.validation_status = "waiting" + else: + item.validation_status = "no" + + def _compute_next_review(self): + for rec in self: + review = rec.review_ids.sorted("sequence").filtered( + lambda x: x.status == "pending" + )[:1] + rec.next_review = review and self.env._("Next: %s", review.name or "") + + def _compute_hide_reviews(self): + for rec in self: + rec.hide_reviews = rec[self._state_field] not in self._state_from + + def _compute_need_validation(self): + for rec in self: + if isinstance(rec.id, api.NewId): + rec.need_validation = False + continue + tiers = ( + self.env["tier.definition"] + .with_context(active_test=True) + .search( + [ + ("model", "=", self._name), + ("company_id", "in", [False] + rec._get_company().ids), + ] + ) + ) + valid_tiers = any([rec.evaluate_tier(tier) for tier in tiers]) + rec.need_validation = ( + not rec.review_ids and valid_tiers and rec._check_state_from_condition() + ) + + def evaluate_tier(self, tier): + if tier.definition_domain: + domain = literal_eval(tier.definition_domain) + return self.filtered_domain(domain) + else: + return self + + @api.model + def _get_validation_exceptions(self, extra_domain=None, add_base_exceptions=True): + """Return Tier Validation Exception field names that matchs custom domain.""" + exception_fields = ( + self.env["tier.validation.exception"] + .sudo() + .search( + [ + ("model_name", "=", self._name), + ("company_id", "in", [False] + self._get_company().ids), + "|", + ("group_ids", "in", self.env.user.group_ids.ids), + ("group_ids", "=", False), + *(extra_domain or []), + ] + ) + .mapped("field_ids.name") + ) + if add_base_exceptions: + exception_fields += BASE_EXCEPTION_FIELDS + return list(set(exception_fields)) + + @api.model + def _get_all_validation_exceptions(self): + """Extend for more field exceptions to be written when on the entire + validation process.""" + return self._get_validation_exceptions() + + @api.model + def _get_under_validation_exceptions(self): + """Extend for more field exceptions to be written under validation.""" + return self._get_validation_exceptions( + extra_domain=[("allowed_to_write_under_validation", "=", True)] + ) + + @api.model + def _get_after_validation_exceptions(self): + """Extend for more field exceptions to be written after validation.""" + return self._get_validation_exceptions( + extra_domain=[("allowed_to_write_after_validation", "=", True)] + ) + + def _check_allow_write_under_validation(self, vals): + """Allow to add exceptions for fields that are allowed to be written + or for reviewers for all fields, even when the record is under + validation.""" + if ( + all(self.review_ids.mapped("definition_id.allow_write_for_reviewer")) + and self.env.user in self.reviewer_ids + ): + return True + exceptions = self._get_under_validation_exceptions() + for val in vals: + if val not in exceptions: + return False + return True + + def _check_allow_write_after_validation(self, vals): + """Allow to add exceptions for fields that are allowed to be written + even when the record is after validation.""" + exceptions = self._get_after_validation_exceptions() + for val in vals: + if val not in exceptions: + return False + return True + + def _get_fields_to_write_validation(self, vals, records_exception_function): + """Not allowed fields to write when validation depending + on the given function.""" + exceptions = records_exception_function() + not_allowed_fields = [] + for val in vals: + if val not in exceptions: + not_allowed_fields.append(val) + if not not_allowed_fields: + return [] + + not_allowed_field_names, allowed_field_names = [], [] + for fld_name, fld_data in self.fields_get( + not_allowed_fields + exceptions + ).items(): + if fld_name in not_allowed_fields: + not_allowed_field_names.append(fld_data["string"]) + else: + allowed_field_names.append(fld_data["string"]) + return allowed_field_names, not_allowed_field_names + + def _check_tier_state_transition(self, vals): + """ + Check we are in origin state and not destination state + """ + self.ensure_one() + return getattr(self, self._state_field) in self._state_from and vals.get( + self._state_field + ) not in (self._state_to + [self._cancel_state]) + + def write(self, vals): + self._tier_validation_check_state_on_write(vals) + self._tier_validation_check_write_allowed(vals) + self._tier_validation_check_write_remove_reviews(vals) + return super().write(vals) + + def _write_multi(self, vals_list): + for rec, vals in zip(self, vals_list, strict=False): + if rec._tier_validation_state_field_is_computed: + rec._tier_validation_check_state_on_write(vals) + rec._tier_validation_check_write_remove_reviews(vals) + return super()._write_multi(vals_list) + + def _tier_validation_get_current_state_value(self): + """Get the current value from the cache or the database. + + If the field is set in a computed method, the value in the cache will + already be the updated value, so we need to revert to the raw data. + """ + self.ensure_one() + if self._tier_validation_state_field_is_computed and isinstance(self.id, int): + self.env.cr.execute( + SQL( + "select %(field)s from %(table)s where id = %(res_id)s", + field=AsIs(self._state_field), + table=AsIs(self._table), + res_id=self.id, + ) + ) + rows = self.env.cr.fetchall() + if rows: + return rows[0][0] + return self[self._state_field] + + def _tier_validation_check_state_on_write(self, vals): + for rec in self: + if rec._check_state_conditions(vals): + if rec.need_validation: + # try to validate operation + reviews = rec.request_validation() + rec._validate_tier(reviews) + if rec.validation_status != "validated": + pending_reviews = reviews.filtered( + lambda r: r.status == "pending" + ).mapped("name") + raise ValidationError( + self.env._( + "This action needs to be validated for at least " + "one record. Reviews pending:\n - %s " + "\nPlease request a validation.", + "\n - ".join(pending_reviews), + ) + ) + if rec.review_ids and rec.validation_status != "validated": + raise ValidationError( + self.env._( + "A validation process is still open for at least " + "one record." + ) + ) + + def _tier_validation_check_write_allowed(self, vals): + for rec in self: + # Write under validation + if ( + rec.review_ids + and rec._check_tier_state_transition(vals) + and not rec._check_allow_write_under_validation(vals) + and not rec._context.get("skip_validation_check") + ): + ( + allowed_fields, + not_allowed_fields, + ) = rec._get_fields_to_write_validation( + vals, rec._get_under_validation_exceptions + ) + not_allowed_fields_str = "\n- ".join(not_allowed_fields) + allowed_fields_str = "\n- ".join(allowed_fields) + raise ValidationError( + self.env._( + "You are not allowed to write those fields under validation.\n" + "- %(not_allowed_fields_str)s\n\n" + "Only those fields can be modified:\n- %(allowed_fields_str)s", + not_allowed_fields_str=not_allowed_fields_str, + allowed_fields_str=allowed_fields_str, + ) + ) + + # Write after validation. Check only if Tier Validation Exception is created + if ( + rec._get_validation_exceptions(add_base_exceptions=False) + and rec.validation_status == "validated" + and rec._tier_validation_get_current_state_value() + in (self._state_to + [self._cancel_state]) + and not rec._check_allow_write_after_validation(vals) + and not rec._context.get("skip_validation_check") + ): + ( + allowed_fields, + not_allowed_fields, + ) = rec._get_fields_to_write_validation( + vals, rec._get_after_validation_exceptions + ) + not_allowed_fields_str = "\n- ".join(not_allowed_fields) + allowed_fields_str = "\n- ".join(allowed_fields) + raise ValidationError( + self.env._( + "You are not allowed to write those fields after validation.\n" + "- %(not_allowed_fields_str)s\n\n" + "Only those fields can be modified:\n- %(allowed_fields_str)s", + not_allowed_fields_str=not_allowed_fields_str, + allowed_fields_str=allowed_fields_str, + ) + ) + + def _tier_validation_check_write_remove_reviews(self, vals): + for rec in self: + if rec._allow_to_remove_reviews(vals): + rec.mapped("review_ids").unlink() + + def _allow_to_remove_reviews(self, values): + """Method for deciding whether the elimination of revisions is necessary.""" + self.ensure_one() + state_to = values.get(self._state_field) + if not state_to: + return False + state_from = self._tier_validation_get_current_state_value() + # If you change to _cancel_state + if state_to in (self._cancel_state): + return True + # If it is changed to _state_from and it was not in _state_from + if state_to in self._state_from and state_from not in self._state_from: + return True + return False + + def _check_state_from_condition(self): + return self.env.context.get("skip_check_state_condition") or ( + self._state_field in self._fields + and self._tier_validation_get_current_state_value() in self._state_from + ) + + def _check_state_conditions(self, vals): + self.ensure_one() + return ( + self._check_state_from_condition() + and vals.get(self._state_field) in self._state_to + ) + + def _validate_tier(self, tiers=False): + self.ensure_one() + tier_reviews = tiers or self.review_ids + waiting_reviews = tier_reviews.filtered( + lambda r: r.status == "waiting" + or r.approve_sequence_bypass + and self.env.user in r.reviewer_ids + ) + if waiting_reviews: + waiting_reviews.write( + { + "status": "pending", + } + ) + + user_reviews = tier_reviews.filtered( + lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids) + ) + user_reviews.write( + { + "status": "approved", + "done_by": self.env.user.id, + "reviewed_date": fields.Datetime.now(), + } + ) + reviews_to_notify = user_reviews.filtered( + lambda r: r.definition_id.notify_on_accepted + ) + # We need to notify all pending users if there is approve sequence + if tier_reviews and any(review.approve_sequence for review in tier_reviews): + reviews_to_notify = self.review_ids.filtered( + lambda r: r.status in ("waiting", "pending") + and r.definition_id.notify_on_accepted + ) + # If there are approve sequence, only the following should be + # considered to notify + if reviews_to_notify and any( + review.approve_sequence for review in reviews_to_notify + ): + reviews_to_notify = reviews_to_notify.filtered( + lambda x: x.approve_sequence + )[0] + if reviews_to_notify: + subscribe = "message_subscribe" + if hasattr(self, subscribe): + getattr(self, subscribe)( + partner_ids=reviews_to_notify.mapped("reviewer_ids") + .mapped("partner_id") + .ids, + subtype_ids=self.env.ref( + self._get_accepted_notification_subtype() + ).ids, + ) + for review in reviews_to_notify: + rec = self.env[review.model].browse(review.res_id) + rec._notify_accepted_reviews() + + def _get_requested_notification_subtype(self): + return "base_tier_validation.mt_tier_validation_requested" + + def _get_accepted_notification_subtype(self): + return "base_tier_validation.mt_tier_validation_accepted" + + def _get_rejected_notification_subtype(self): + return "base_tier_validation.mt_tier_validation_rejected" + + def _get_restarted_notification_subtype(self): + return "base_tier_validation.mt_tier_validation_restarted" + + def _notify_accepted_reviews(self): + post = "message_post" + if hasattr(self, post): + # Notify state change + getattr(self.sudo(), post)( + subtype_xmlid=self._get_accepted_notification_subtype(), + body=self._notify_accepted_reviews_body(), + ) + + def _notify_accepted_reviews_body(self): + has_comment = self.review_ids.filtered( + lambda r: (self.env.user in r.reviewer_ids) and r.comment + ) + if has_comment: + comment = has_comment.mapped("comment")[0] + return self.env._("A review was accepted. (%s)", comment) + return self.env._("A review was accepted") + + def _add_comment(self, validate_reject, reviews): + wizard = self.env.ref("base_tier_validation.view_comment_wizard") + return { + "name": self.env._("Comment"), + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "comment.wizard", + "views": [(wizard.id, "form")], + "view_id": wizard.id, + "target": "new", + "context": { + "default_res_id": self.id, + "default_res_model": self._name, + "default_review_ids": reviews.ids, + "default_validate_reject": validate_reject, + }, + } + + def validate_tier(self): + self.ensure_one() + sequences = self._get_sequences_to_approve(self.env.user) + reviews = self.review_ids.filtered( + lambda x: x.sequence in sequences or x.approve_sequence_bypass + ) + if self.has_comment: + user_reviews = reviews.filtered( + lambda r: r.status == "pending" and (self.env.user in r.reviewer_ids) + ) + return self._add_comment("validate", user_reviews) + self._validate_tier(reviews) + self._update_counter({"review_deleted": True}) + + def reject_tier(self): + self.ensure_one() + sequences = self._get_sequences_to_approve(self.env.user) + reviews = self.review_ids.filtered(lambda x: x.sequence in sequences) + if self.has_comment: + return self._add_comment("reject", reviews) + self._rejected_tier(reviews) + self._update_counter({"review_deleted": True}) + + def _notify_rejected_review_body(self): + has_comment = self.review_ids.filtered( + lambda r: (self.env.user in r.reviewer_ids) and r.comment + ) + if has_comment: + comment = has_comment.mapped("comment")[0] + return self.env._( + "A review was rejected by %(user)s. (%(comment)s)", + user=self.env.user.name, + comment=comment, + ) + return self.env._("A review was rejected by %s.", self.env.user.name) + + def _notify_rejected_review(self): + post = "message_post" + if hasattr(self, post): + # Notify state change + getattr(self.sudo(), post)( + subtype_xmlid=self._get_rejected_notification_subtype(), + body=self._notify_rejected_review_body(), + ) + + def _rejected_tier(self, tiers=False): + self.ensure_one() + tier_reviews = tiers or self.review_ids + user_reviews = tier_reviews.filtered( + lambda r: r.status in ("waiting", "pending") + and self.env.user in r.reviewer_ids + ) + user_reviews.write( + { + "status": "rejected", + "done_by": self.env.user.id, + "reviewed_date": fields.Datetime.now(), + } + ) + + reviews_to_notify = user_reviews.filtered( + lambda r: r.definition_id.notify_on_rejected + ) + # We need to notify all pending users if there is approve sequence + if tier_reviews and any(review.approve_sequence for review in tier_reviews): + reviews_to_notify = self.review_ids.filtered( + lambda r: r.status == "pending" and r.definition_id.notify_on_rejected + ) + # If there are approve sequence, only the following should be + # considered to notify + if reviews_to_notify and any( + review.approve_sequence for review in reviews_to_notify + ): + reviews_to_notify = reviews_to_notify.filtered( + lambda x: x.approve_sequence + )[0] + if reviews_to_notify: + subscribe = "message_subscribe" + if hasattr(self, subscribe): + getattr(self, subscribe)( + partner_ids=reviews_to_notify.mapped("reviewer_ids") + .mapped("partner_id") + .ids, + subtype_ids=self.env.ref( + self._get_rejected_notification_subtype() + ).ids, + ) + for review in reviews_to_notify: + rec = self.env[review.model].browse(review.res_id) + rec._notify_rejected_review() + + def _notify_created_review_body(self): + return self.env._( + "A record to be reviewed has been created by %s.", + self.env.user.name, + ) + + def _notify_requested_review_body(self): + return self.env._("A review has been requested by %s.", self.env.user.name) + + def _notify_review_requested(self, tier_reviews): + """method to notify when tier validation is created""" + subscribe = "message_subscribe" + post = "message_post" + if hasattr(self, post) and hasattr(self, subscribe): + for rec in self.sudo(): + users_to_notify = tier_reviews.filtered( + lambda r, x=rec: r.definition_id.notify_on_create + and r.res_id == x.id + ).mapped("reviewer_ids") + # Subscribe reviewers and notify + if len(users_to_notify) > 0: + getattr(rec, subscribe)( + partner_ids=users_to_notify.mapped("partner_id").ids, + subtype_ids=self.env.ref( + self._get_requested_notification_subtype() + ).ids, + ) + getattr(rec, post)( + subtype_xmlid=self._get_requested_notification_subtype(), + body=rec._notify_created_review_body(), + ) + + def _prepare_tier_review_vals(self, definition, sequence): + return { + "model": self._name, + "res_id": self.id, + "definition_id": definition.id, + "requested_by": self.env.uid, + "sequence": sequence, + } + + @api.model + def _get_company(self): + company_id = self.env.company + if ( + self + and self._tier_validation_company_field in self.env[self._name] + and self[self._tier_validation_company_field] + ): + company_id = self[self._tier_validation_company_field] + return company_id + + def request_validation(self): + td_obj = self.env["tier.definition"] + tr_obj = self.env["tier.review"] + vals_list = [] + for rec in self: + if rec._check_state_from_condition() and rec.need_validation: + tier_definitions = td_obj.search( + [ + ("model", "=", self._name), + ("company_id", "in", [False] + rec._get_company().ids), + ], + order="sequence desc", + ) + sequence = 0 + for td in tier_definitions: + if rec.evaluate_tier(td): + sequence += 1 + vals_list.append(rec._prepare_tier_review_vals(td, sequence)) + created_trs = tr_obj.create(vals_list) + if any(self.mapped("can_review")): + self._update_counter({"review_created": True}) + self._notify_review_requested(created_trs) + return created_trs + + def _notify_restarted_review_body(self): + return self.env._("The review has been reset by %s.", self.env.user.name) + + def _notify_restarted_review(self): + post = "message_post" + if hasattr(self, post): + getattr(self.sudo(), post)( + subtype_xmlid=self._get_restarted_notification_subtype(), + body=self._notify_restarted_review_body(), + ) + + def restart_validation(self): + for rec in self: + partners_to_notify_ids = False + if getattr(rec, self._state_field) in self._state_from: + to_update_counter = ( + rec.mapped("review_ids").filtered( + lambda a: a.status in ("waiting", "pending") + ) + and True + or False + ) + reviews_to_notify = rec.review_ids.filtered( + lambda r: r.definition_id.notify_on_restarted + ) + if reviews_to_notify: + partners_to_notify_ids = ( + reviews_to_notify.mapped("reviewer_ids") + .mapped("partner_id") + .ids + ) + can_review = rec.can_review + rec.mapped("review_ids").unlink() + if to_update_counter and can_review: + self._update_counter({"review_deleted": True}) + if partners_to_notify_ids: + subscribe = "message_subscribe" + reviews_to_notify = rec.review_ids.filtered( + lambda r: r.definition_id.notify_on_restarted + ) + if hasattr(self, subscribe): + getattr(self, subscribe)( + partner_ids=partners_to_notify_ids, + subtype_ids=self.env.ref( + self._get_restarted_notification_subtype() + ).ids, + ) + rec._notify_restarted_review() + + @api.model + def _update_counter(self, review_counter): + self.review_ids._compute_can_review() + channel = "base.tier.validation/updated" + self.env.user.partner_id._bus_send(channel, review_counter) + + def unlink(self): + self.mapped("review_ids").unlink() + return super().unlink() + + def _add_tier_validation_buttons(self, node, params): + str_element = self.env["ir.qweb"]._render( + "base_tier_validation.tier_validation_buttons", params + ) + new_node = etree.fromstring(str_element) + return new_node + + def _add_tier_validation_label(self, node, params): + str_element = self.env["ir.qweb"]._render( + "base_tier_validation.tier_validation_label", params + ) + new_node = etree.fromstring(str_element) + return new_node + + def _add_tier_validation_reviews(self, node, params): + str_element = self.env["ir.qweb"]._render( + "base_tier_validation.tier_validation_reviews", params + ) + new_node = etree.fromstring(str_element) + return new_node + + def _get_tier_validation_readonly_domain(self): + return "bool(review_ids)" + + @api.model + def get_view(self, view_id=None, view_type="form", **options): + res = super().get_view(view_id=view_id, view_type=view_type, **options) + View = self.env["ir.ui.view"] + if view_type == "form" and not self._tier_validation_manual_config: + doc = etree.XML(res["arch"]) + params = {} + all_models = res["models"].copy() # {modelname(str) ➔ fields(tuple)} + for node in doc.xpath(self._tier_validation_buttons_xpath): + # By default, after the last button of the header + # _add_tier_validation_buttons process + new_node = self._add_tier_validation_buttons(node, params) + new_arch, new_models = View.postprocess_and_fields(new_node, self._name) + new_node = etree.fromstring(new_arch) + for new_element in new_node: + node.addnext(new_element) + _merge_view_fields(all_models, new_models) + for node in doc.xpath("/form/sheet"): + # _add_tier_validation_label process + new_node = self._add_tier_validation_label(node, params) + new_arch, new_models = View.postprocess_and_fields(new_node, self._name) + new_node = etree.fromstring(new_arch) + for new_element in new_node: + node.addprevious(new_element) + _merge_view_fields(all_models, new_models) + # _add_tier_validation_reviews process + new_node = self._add_tier_validation_reviews(node, params) + new_arch, new_models = View.postprocess_and_fields(new_node, self._name) + new_node = etree.fromstring(new_arch) + node.append(new_node) + _merge_view_fields(all_models, new_models) + excepted_fields = self._get_all_validation_exceptions() + all_fields = self.fields_get(attributes=("readonly",)) + for node in doc.xpath("//field[@name][not(ancestor::field)]"): + field_name = node.attrib.get("name") + if field_name in excepted_fields: + continue + new_r_modifier = self._get_tier_validation_readonly_domain() + old_r_modifier = node.attrib.get("readonly") + if old_r_modifier: + new_r_modifier = f"({old_r_modifier}) or ({new_r_modifier})" + elif all_fields.get(field_name, {}).get("readonly"): + # don't set dynamic readonly attribute for fields + # marked readonly in the ORM (ie computed fields) + # if the view doesn't set one + continue + node.attrib["readonly"] = new_r_modifier + res["arch"] = etree.tostring(doc) + res["models"] = frozendict(all_models) + return res + + def _notify_review_available(self, tier_reviews): + """method to notify when reaching pending""" + subscribe = "message_subscribe" + post = "message_post" + if hasattr(self, post) and hasattr(self, subscribe): + for rec in self.sudo(): + users_to_notify = tier_reviews.filtered( + lambda r, x=rec: r.definition_id.notify_on_pending + and r.res_id == x.id + ).mapped("reviewer_ids") + # Subscribe reviewers and notify + rec.message_subscribe( + partner_ids=users_to_notify.mapped("partner_id").ids + ) + rec.message_post( + subtype_xmlid=self._get_requested_notification_subtype(), + body=rec._notify_requested_review_body(), + ) + + +def _merge_view_fields(all_models: dict, new_models: dict): + """Merge new_models into all_models. Both are {modelname(str) ➔ fields(tuple)}.""" + for model, view_fields in new_models.items(): + if model in all_models: + all_models[model] = tuple(set(all_models[model]) | set(view_fields)) + else: + all_models[model] = tuple(view_fields) diff --git a/base_tier_validation/models/tier_validation_exception.py b/base_tier_validation/models/tier_validation_exception.py new file mode 100644 index 00000000..ad0f35dc --- /dev/null +++ b/base_tier_validation/models/tier_validation_exception.py @@ -0,0 +1,94 @@ +# Copyright 2024 Moduon Team (https://www.moduon.team) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, exceptions, fields, models + +from .tier_validation import BASE_EXCEPTION_FIELDS + + +class TierValidationException(models.Model): + _name = "tier.validation.exception" + _description = "Tier Validation Exceptions" + + @api.model + def _get_tier_validation_model_names(self): + return self.env["tier.definition"]._get_tier_validation_model_names() + + name = fields.Char( + required=True, + default="New Tier Validation Exception", + ) + model_id = fields.Many2one( + comodel_name="ir.model", + string="Model", + required=True, + ondelete="cascade", + domain=lambda self: [("model", "in", self._get_tier_validation_model_names())], + ) + model_name = fields.Char( + related="model_id.model", + string="Model Name", + store=True, + index=True, + ) + field_ids = fields.Many2many( + comodel_name="ir.model.fields", + string="Fields", + domain="[('id', 'in', valid_model_field_ids)]", + required=True, + ) + valid_model_field_ids = fields.One2many( + comodel_name="ir.model.fields", + compute="_compute_valid_model_field_ids", + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self.env.company, + ) + allowed_to_write_under_validation = fields.Boolean( + string="Write under Validation", + default=True, + ) + allowed_to_write_after_validation = fields.Boolean( + string="Write after Validation", + default=True, + ) + group_ids = fields.Many2many( + comodel_name="res.groups", + string="Groups", + help="Allowed groups to use this Tier Validation Exception", + ) + + @api.depends("model_id") + def _compute_valid_model_field_ids(self): + model_names = self.mapped("model_name") + valid_model_fields = dict( + self.env["ir.model.fields"] + .sudo() + ._read_group( + domain=[ + ("model", "in", model_names), + ("name", "not in", BASE_EXCEPTION_FIELDS), + ], + groupby=["model"], + aggregates=["id:array_agg"], + ) + ) + for record in self: + record.valid_model_field_ids = valid_model_fields.get(record.model_name, []) + + @api.constrains( + "allowed_to_write_under_validation", "allowed_to_write_after_validation" + ) + def _check_allowed_to_write(self): + if ( + not self.allowed_to_write_under_validation + and not self.allowed_to_write_after_validation + ): + raise exceptions.ValidationError( + self.env._( + "At least one of these fields must be checked! " + "Write under Validation, Write after Validation" + ) + ) diff --git a/base_tier_validation/pyproject.toml b/base_tier_validation/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/base_tier_validation/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/base_tier_validation/readme/CONFIGURE.md b/base_tier_validation/readme/CONFIGURE.md new file mode 100644 index 00000000..4bd817e6 --- /dev/null +++ b/base_tier_validation/readme/CONFIGURE.md @@ -0,0 +1,33 @@ +To configure this module, you need to: + +1. Go to *Settings \> Technical \> Tier Validations \> Tier + Definition*. +2. Create as many tiers as you want for any model having tier + validation functionality. + +**Note:** + +- If check *Notify Reviewers on Creation*, all possible reviewers will + be notified by email when this definition is triggered. +- If check *Notify reviewers on reaching pending* if you want to send a notification when pending status is reached. + This is usefull in a approve by sequence scenario to only notify reviewers when it is their turn in the sequence. +- If check *Comment*, reviewers can comment after click Validate or + Reject. +- If check *Approve by sequence*, reviewers is forced to review by + specified sequence. + +To configure Tier Validation Exceptions, you need to: + +1. Go to *Settings > Technical > Tier Validations > Tier Validation Exceptions*. +2. Create as many tiers validation exceptions as you want for any model + having tier validation functionality. +3. Add desired fields to be checked in *Fields*. +4. Add desired groups that can use this Exception in *Groups*. +5. You must check *Write under Validation*, *Write after Validation* or both. + +**Note:** + +* If you don't create any exception, the Validated record will be readonly and cannot be modified. +* If check *Write under Validation*, records will be able to be modified only in the defined fields when the Validation process is ongoing. +* If check *Write after Validation*, records will be able to be modified only in the defined fields when the Validation process is finished. +* If check *Write after Validation* and *Write under Validation*, records will be able to be modified defined fields always. diff --git a/base_tier_validation/readme/CONTRIBUTORS.md b/base_tier_validation/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..13892857 --- /dev/null +++ b/base_tier_validation/readme/CONTRIBUTORS.md @@ -0,0 +1,18 @@ +- Lois Rilo \<\> +- Naglis Jonaitis \<\> +- Adrià Gil Sorribes \<\> +- Pimolnat Suntian \<\> +- Pedro Gonzalez \<\> +- Kitti U. \<\> +- Saran Lim. \<\> +- Carlos Lopez \<\> +- Javier Colmeiro \<\> +- bosd +- Evan Soh \<\> +- Manuel Regidor \<\> +- Eduardo de Miguel \<\> +- [XCG Consulting](https://xcg-consulting.fr): + - Houzéfa Abbasbhay +- Stefan Rijnhart \<\> +- Kevin Khao \<\> +- Do Anh Duy \<\> diff --git a/base_tier_validation/readme/CREDITS.md b/base_tier_validation/readme/CREDITS.md new file mode 100644 index 00000000..83b3ec91 --- /dev/null +++ b/base_tier_validation/readme/CREDITS.md @@ -0,0 +1 @@ +The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp. diff --git a/base_tier_validation/readme/DESCRIPTION.md b/base_tier_validation/readme/DESCRIPTION.md new file mode 100644 index 00000000..6f5bd945 --- /dev/null +++ b/base_tier_validation/readme/DESCRIPTION.md @@ -0,0 +1,19 @@ +Validating some operations is a common need across different areas in a +company and sometimes it also involves several people and stages in the +process. With this module you will be able to define your custom +validation workflows for any Odoo document. + +This module does not provide a functionality by itself but an abstract +model to implement a validation process based on tiers on other models +(e.g. purchase orders, sales orders, budgets, expenses...). + +**Note:** To be able to use this module in a new model you will need +some development. + +See [purchase_tier_validation](https://github.com/OCA/purchase-workflow) +as an example of implementation. + +Additionally, if your state field is a (stored) computed field, you need to +set `_tier_validation_state_field_is_computed` to `True` in your model Python +file, and you will want to add the dependent fields of the compute method +in `_get_after_validation_exceptions` and `_get_under_validation_exceptions`. diff --git a/base_tier_validation/readme/HISTORY.md b/base_tier_validation/readme/HISTORY.md new file mode 100644 index 00000000..3d438da6 --- /dev/null +++ b/base_tier_validation/readme/HISTORY.md @@ -0,0 +1,85 @@ +## 17.0.1.0.0 (2024-01-10) + +Migrated to Odoo 17. +Merged module with tier_validation_waiting. +To support sending messages in a validation sequence when it is their turn to validate. + +## 14.0.1.0.0 (2020-11-19) + +Migrated to Odoo 14. + +## 13.0.1.2.2 (2020-08-30) + +Fixes: + +- When using approve_sequence option in any tier.definition there can be + inconsistencies in the systray notifications +- When using approve_sequence, still not approve only the needed + sequence, but also other sequence for the same approver + +## 12.0.3.3.1 (2019-12-02) + +Fixes: + +- Show comment on Reviews Table. +- Edit notification with approve_sequence. + +## 12.0.3.3.0 (2019-11-27) + +New features: + +- Add comment on Reviews Table. +- Approve by sequence. + +## 12.0.3.2.1 (2019-11-26) + +Fixes: + +- Remove message_subscribe_users + +## 12.0.3.2.0 (2019-11-25) + +New features: + +- Notify reviewers + +## 12.0.3.1.0 (2019-07-08) + +Fixes: + +- Singleton error + +## 12.0.3.0.0 (2019-12-02) + +Fixes: + +- Edit Reviews Table + +## 12.0.2.1.0 (2019-05-29) + +Fixes: + +- Edit drop-down style width and position + +## 12.0.2.0.0 (2019-05-28) + +New features: + +- Pass parameters as functions. +- Add Systray. + +## 12.0.1.0.0 (2019-02-18) + +Migrated to Odoo 12. + +## 11.0.1.0.0 (2018-05-09) + +Migrated to Odoo 11. + +## 10.0.1.0.0 (2018-03-26) + +Migrated to Odoo 10. + +## 9.0.1.0.0 (2017-12-02) + +First version. diff --git a/base_tier_validation/readme/ROADMAP.md b/base_tier_validation/readme/ROADMAP.md new file mode 100644 index 00000000..40f705c0 --- /dev/null +++ b/base_tier_validation/readme/ROADMAP.md @@ -0,0 +1,22 @@ +This is the list of known issues for this module. Any proposal for +improvement will be very valuable. + +- **Issue:** + + When using approve_sequence option in any tier.definition there can be + inconsistencies in the systray notifications. + + **Description:** + + Field can_review in tier.review is used to filter out, in the systray + notifications, the reviews a user can approve. This can_review field + is updated **in the database** in method review_user_count, this can + make it very inconsistent for databases with a lot of users and + recurring updates that can change the expected behavior. + +- **Migration to 15.0:** + + The parameter \_tier_validation_manual_config will become False, on + 14.0, the default value is True, as the change is applied after the + migration. In order to use the new behavior we need to modify the + value on our expected model. diff --git a/base_tier_validation/security/ir.model.access.csv b/base_tier_validation/security/ir.model.access.csv new file mode 100644 index 00000000..82c76c65 --- /dev/null +++ b/base_tier_validation/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_tier_review_group_public,access_tier_review_group_public,model_tier_review,base.group_public,1,0,0,0 +access_tier_definition_group_public,access_tier_definition_group_public,model_tier_definition,base.group_public,1,0,0,0 +access_tier_review_group_portal,access_tier_review_group_portal,model_tier_review,base.group_portal,1,0,0,0 +access_tier_definition_group_portal,access_tier_definition_group_portal,model_tier_definition,base.group_portal,1,0,0,0 +access_tier_review,access.tier.review,model_tier_review,base.group_user,1,1,1,1 +access_tier_definition_all,tier.definition.all,model_tier_definition,base.group_user,1,0,0,0 +access_tier_definition_settings,tier.definition.settings,model_tier_definition,base.group_erp_manager,1,1,1,1 +access_comment_wizard,access.comment.wizard,model_comment_wizard,base.group_user,1,1,1,1 +access_tier_validation_exceptions_all,tier.validation.exceptions,model_tier_validation_exception,base.group_user,1,0,0,0 +access_tier_validation_exceptions_settings,tier.validation.exceptions,model_tier_validation_exception,base.group_system,1,1,1,1 diff --git a/base_tier_validation/security/tier_validation_security.xml b/base_tier_validation/security/tier_validation_security.xml new file mode 100644 index 00000000..c11aa502 --- /dev/null +++ b/base_tier_validation/security/tier_validation_security.xml @@ -0,0 +1,15 @@ + + + + Tier Definition multi-company + + + [('company_id', 'in', company_ids + [False])] + + + Tier Review multi-company + + + [('company_id', 'in', company_ids + [False])] + + diff --git a/base_tier_validation/static/description/icon.png b/base_tier_validation/static/description/icon.png new file mode 100644 index 00000000..e4781126 Binary files /dev/null and b/base_tier_validation/static/description/icon.png differ diff --git a/base_tier_validation/static/description/icon.svg b/base_tier_validation/static/description/icon.svg new file mode 100644 index 00000000..a04a24bd --- /dev/null +++ b/base_tier_validation/static/description/icon.svg @@ -0,0 +1,70 @@ + + + + diff --git a/base_tier_validation/static/description/index.html b/base_tier_validation/static/description/index.html new file mode 100644 index 00000000..7b55c53b --- /dev/null +++ b/base_tier_validation/static/description/index.html @@ -0,0 +1,657 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Base Tier Validation

+ +

Mature License: AGPL-3 OCA/server-ux Translate me on Weblate Try me on Runboat

+

Validating some operations is a common need across different areas in a +company and sometimes it also involves several people and stages in the +process. With this module you will be able to define your custom +validation workflows for any Odoo document.

+

This module does not provide a functionality by itself but an abstract +model to implement a validation process based on tiers on other models +(e.g. purchase orders, sales orders, budgets, expenses…).

+

Note: To be able to use this module in a new model you will need +some development.

+

See +purchase_tier_validation +as an example of implementation.

+

Additionally, if your state field is a (stored) computed field, you need +to set _tier_validation_state_field_is_computed to True in your +model Python file, and you will want to add the dependent fields of the +compute method in _get_after_validation_exceptions and +_get_under_validation_exceptions.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Settings > Technical > Tier Validations > Tier Definition.
  2. +
  3. Create as many tiers as you want for any model having tier validation +functionality.
  4. +
+

Note:

+
    +
  • If check Notify Reviewers on Creation, all possible reviewers will +be notified by email when this definition is triggered.
  • +
  • If check Notify reviewers on reaching pending if you want to send a +notification when pending status is reached. This is usefull in a +approve by sequence scenario to only notify reviewers when it is their +turn in the sequence.
  • +
  • If check Comment, reviewers can comment after click Validate or +Reject.
  • +
  • If check Approve by sequence, reviewers is forced to review by +specified sequence.
  • +
+

To configure Tier Validation Exceptions, you need to:

+
    +
  1. Go to Settings > Technical > Tier Validations > Tier Validation +Exceptions.
  2. +
  3. Create as many tiers validation exceptions as you want for any model +having tier validation functionality.
  4. +
  5. Add desired fields to be checked in Fields.
  6. +
  7. Add desired groups that can use this Exception in Groups.
  8. +
  9. You must check Write under Validation, Write after Validation or +both.
  10. +
+

Note:

+
    +
  • If you don’t create any exception, the Validated record will be +readonly and cannot be modified.
  • +
  • If check Write under Validation, records will be able to be modified +only in the defined fields when the Validation process is ongoing.
  • +
  • If check Write after Validation, records will be able to be modified +only in the defined fields when the Validation process is finished.
  • +
  • If check Write after Validation and Write under Validation, +records will be able to be modified defined fields always.
  • +
+
+
+

Known issues / Roadmap

+

This is the list of known issues for this module. Any proposal for +improvement will be very valuable.

+
    +
  • Issue:

    +

    When using approve_sequence option in any tier.definition there can be +inconsistencies in the systray notifications.

    +

    Description:

    +

    Field can_review in tier.review is used to filter out, in the systray +notifications, the reviews a user can approve. This can_review field +is updated in the database in method review_user_count, this can +make it very inconsistent for databases with a lot of users and +recurring updates that can change the expected behavior.

    +
  • +
  • Migration to 15.0:

    +

    The parameter _tier_validation_manual_config will become False, on +14.0, the default value is True, as the change is applied after the +migration. In order to use the new behavior we need to modify the +value on our expected model.

    +
  • +
+
+
+

Changelog

+
+

17.0.1.0.0 (2024-01-10)

+

Migrated to Odoo 17. Merged module with tier_validation_waiting. To +support sending messages in a validation sequence when it is their turn +to validate.

+
+
+

14.0.1.0.0 (2020-11-19)

+

Migrated to Odoo 14.

+
+
+

13.0.1.2.2 (2020-08-30)

+

Fixes:

+
    +
  • When using approve_sequence option in any tier.definition there can be +inconsistencies in the systray notifications
  • +
  • When using approve_sequence, still not approve only the needed +sequence, but also other sequence for the same approver
  • +
+
+
+

12.0.3.3.1 (2019-12-02)

+

Fixes:

+
    +
  • Show comment on Reviews Table.
  • +
  • Edit notification with approve_sequence.
  • +
+
+
+

12.0.3.3.0 (2019-11-27)

+

New features:

+
    +
  • Add comment on Reviews Table.
  • +
  • Approve by sequence.
  • +
+
+
+

12.0.3.2.1 (2019-11-26)

+

Fixes:

+
    +
  • Remove message_subscribe_users
  • +
+
+
+

12.0.3.2.0 (2019-11-25)

+

New features:

+
    +
  • Notify reviewers
  • +
+
+
+

12.0.3.1.0 (2019-07-08)

+

Fixes:

+
    +
  • Singleton error
  • +
+
+
+

12.0.3.0.0 (2019-12-02)

+

Fixes:

+
    +
  • Edit Reviews Table
  • +
+
+
+

12.0.2.1.0 (2019-05-29)

+

Fixes:

+
    +
  • Edit drop-down style width and position
  • +
+
+
+

12.0.2.0.0 (2019-05-28)

+

New features:

+
    +
  • Pass parameters as functions.
  • +
  • Add Systray.
  • +
+
+
+

12.0.1.0.0 (2019-02-18)

+

Migrated to Odoo 12.

+
+
+

11.0.1.0.0 (2018-05-09)

+

Migrated to Odoo 11.

+
+
+

10.0.1.0.0 (2018-03-26)

+

Migrated to Odoo 10.

+
+
+

9.0.1.0.0 (2017-12-02)

+

First version.

+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

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.

+ +Odoo Community Association + +

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.

+

Current maintainer:

+

LoisRForgeFlow

+

This module is part of the OCA/server-ux project on GitHub.

+

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

+
+
+
+
+ + diff --git a/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.esm.js b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.esm.js new file mode 100644 index 00000000..553796b8 --- /dev/null +++ b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.esm.js @@ -0,0 +1,74 @@ +import {Component, useState} from "@odoo/owl"; +import {Dropdown} from "@web/core/dropdown/dropdown"; +import {registry} from "@web/core/registry"; +import {useDiscussSystray} from "@mail/utils/common/hooks"; +import {useDropdownState} from "@web/core/dropdown/dropdown_hooks"; +import {useService} from "@web/core/utils/hooks"; + +export class TierReviewMenu extends Component { + static components = {Dropdown}; + static props = []; + static template = "base_tier_validation.TierReviewMenu"; + + setup() { + super.setup(); + this.discussSystray = useDiscussSystray(); + this.orm = useService("orm"); + this.store = useState(useService("mail.store")); + this.action = useService("action"); + this.dropdown = useDropdownState(); + this.fetchSystrayReviewer(); + } + + async fetchSystrayReviewer() { + const groups = await this.orm.call("res.users", "review_user_count"); + let total = 0; + for (const group of groups) { + total += group.pending_count || 0; + } + this.store.tierReviewCounter = total; + this.store.tierReviewGroups = groups; + } + + availableViews() { + return [ + [false, "kanban"], + [false, "list"], + [false, "form"], + [false, "activity"], + ]; + } + + openReviewGroup(group) { + this.dropdown.close(); + const context = {}; + const domain = [["can_review", "=", true]]; + if (group.active_field) { + domain.push(["active", "in", [true, false]]); + } + const views = this.availableViews(); + + this.action.doAction( + { + context, + domain, + name: group.name, + res_model: group.model, + search_view_id: [false], + type: "ir.actions.act_window", + views, + }, + { + clearBreadcrumbs: true, + } + ); + } +} + +export const systrayItem = { + Component: TierReviewMenu, +}; + +registry + .category("systray") + .add("base_tier_validation.ReviewerMenu", systrayItem, {sequence: 99}); diff --git a/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml new file mode 100644 index 00000000..f4b1c323 --- /dev/null +++ b/base_tier_validation/static/src/components/tier_review_menu/tier_review_menu.xml @@ -0,0 +1,71 @@ + + + + + + + +
+
+ No reviews to do. +
+
+ +
+ Review +
+
+
+ + Pending + +
+
+
+ +
+
+ + + + + diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js new file mode 100644 index 00000000..b9b87135 --- /dev/null +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.esm.js @@ -0,0 +1,53 @@ +import {Component, useState} from "@odoo/owl"; +import {registry} from "@web/core/registry"; +import {useService} from "@web/core/utils/hooks"; + +export class ReviewsTable extends Component { + setup() { + super.setup(); + this.orm = useService("orm"); + this.state = useState({ + collapse: false, + }); + } + + _getReviewData() { + const records = this.props.record.data.review_ids.records; + return records.map((record) => record.data); + } + + onToggleCollapse(ev) { + const panelHeading = ev.currentTarget.closest(".panel-heading"); + const collapseDiv = panelHeading.nextElementSibling.matches("div#collapse1") + ? panelHeading.nextElementSibling + : null; + if (!collapseDiv) return; + if (this.state.collapse) { + collapseDiv.style.display = "none"; + } else { + collapseDiv.style.display = "block"; + } + this.state.collapse = !this.state.collapse; + } +} + +ReviewsTable.template = "base_tier_validation.Collapse"; + +export const reviewsTableComponent = { + component: ReviewsTable, + supportedTypes: ["one2many"], + relatedFields: [ + {name: "id", type: "integer"}, + {name: "sequence", type: "integer"}, + {name: "name", type: "char"}, + {name: "display_status", type: "char"}, + {name: "todo_by", type: "char"}, + {name: "status", type: "char"}, + {name: "reviewed_formated_date", type: "char"}, + {name: "comment", type: "char"}, + {name: "requested_by", type: "many2one", relation: "partner"}, + {name: "done_by", type: "many2one", relation: "partner"}, + ], +}; + +registry.category("fields").add("form.tier_validation", reviewsTableComponent); diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss new file mode 100644 index 00000000..a42c166d --- /dev/null +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.scss @@ -0,0 +1,41 @@ +ul.o_review { + min-width: 600px; + max-width: 800px; +} + +.panel-group { + min-height: auto !important; + margin-top: -6px !important; + padding: 16px 16px 8px 16px !important; +} + +.panel-heading { + background-color: initial !important; +} + +.panel { + border: 0 !important; +} + +.panel-body { + overflow-y: hidden; + overflow-x: auto; +} + +.panel-title > a, +.panel-title > a:active { + display: block; +} + +.panel-heading a:before { + font-family: FontAwesome; + content: "\f0d7"; + float: right; + transition: all 0.5s; +} + +.panel-heading.active a:before { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); +} diff --git a/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml new file mode 100644 index 00000000..7716141f --- /dev/null +++ b/base_tier_validation/static/src/components/tier_review_widget/tier_review_widget.xml @@ -0,0 +1,112 @@ + + + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SequenceRequested byDescriptionStatusTodo byDone byValidation DateComment
+ + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
diff --git a/base_tier_validation/static/src/js/services/tier_review_service.esm.js b/base_tier_validation/static/src/js/services/tier_review_service.esm.js new file mode 100644 index 00000000..bde257be --- /dev/null +++ b/base_tier_validation/static/src/js/services/tier_review_service.esm.js @@ -0,0 +1,33 @@ +import {reactive} from "@odoo/owl"; +import {registry} from "@web/core/registry"; + +export class TierReviewService { + constructor(env, services) { + this.env = env; + this.store = services["mail.store"]; + this.busService = services.bus_service; + } + setup() { + this.busService.subscribe("base.tier.validation/updated", (payload) => { + if (payload.review_created) { + this.store.tierReviewCounter++; + } + if (payload.review_deleted) { + this.store.tierReviewCounter--; + } + }); + this.busService.start(); + } +} + +export const tierReviewService = { + dependencies: ["bus_service", "mail.store"], + + start(env, services) { + const tier_review_service = reactive(new TierReviewService(env, services)); + tier_review_service.setup(); + return tier_review_service; + }, +}; + +registry.category("services").add("tierReviewService", tierReviewService); diff --git a/base_tier_validation/templates/tier_validation_templates.xml b/base_tier_validation/templates/tier_validation_templates.xml new file mode 100644 index 00000000..b63d94dd --- /dev/null +++ b/base_tier_validation/templates/tier_validation_templates.xml @@ -0,0 +1,97 @@ + + + + + + diff --git a/base_tier_validation/tests/__init__.py b/base_tier_validation/tests/__init__.py new file mode 100644 index 00000000..a07447da --- /dev/null +++ b/base_tier_validation/tests/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_tier_validation +from . import test_tier_validation_reminder +from . import test_tier diff --git a/base_tier_validation/tests/common.py b/base_tier_validation/tests/common.py new file mode 100644 index 00000000..ccac99bf --- /dev/null +++ b/base_tier_validation/tests/common.py @@ -0,0 +1,217 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo_test_helper import FakeModelLoader + +from odoo import Command +from odoo.tests import new_test_user + +from odoo.addons.base.tests.common import BaseCommon + + +class CommonTierValidation(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + from .tier_validation_tester import ( + TierDefinition, + TierValidationTester, + TierValidationTester2, + TierValidationTesterComputed, + ) + + cls.loader.update_registry( + ( + TierValidationTester, + TierValidationTester2, + TierValidationTesterComputed, + TierDefinition, + ) + ) + + cls.test_model = cls.env[TierValidationTester._name] + cls.test_model_2 = cls.env[TierValidationTester2._name] + cls.test_model_computed = cls.env[TierValidationTesterComputed._name] + + cls.tester_model = cls.env["ir.model"].search( + [("model", "=", "tier.validation.tester")] + ) + cls.tester_model_2 = cls.env["ir.model"].search( + [("model", "=", "tier.validation.tester2")] + ) + cls.tester_model_computed = cls.env["ir.model"].search( + [("model", "=", "tier.validation.tester.computed")] + ) + # Create a multi-company + cls.main_company = cls.env.ref("base.main_company") + cls.other_company = cls.env["res.company"].create({"name": "My Company"}) + + models = ( + cls.tester_model, + cls.tester_model_2, + cls.tester_model_computed, + ) + for model in models: + # Access record: + cls.env["ir.model.access"].create( + { + "name": f"access {model.name}", + "model_id": model.id, + "perm_read": 1, + "perm_write": 1, + "perm_create": 1, + "perm_unlink": 1, + } + ) + + # Define views to avoid automatic views with all fields. + cls.env["ir.ui.view"].create( + { + "model": model.model, + "name": f"Demo view for {model}", + "arch": """
+
+
+ + + +
""", + } + ) + + # Create users: + cls.test_user_1 = new_test_user( + cls.env, name="John", login="test1", groups="base.group_system" + ) + cls.test_user_2 = new_test_user(cls.env, name="Mike", login="test2") + cls.test_user_3_multi_company = new_test_user( + cls.env, + name="Jane", + login="test3", + company_ids=[Command.set([cls.main_company.id, cls.other_company.id])], + ) + # Create groups + cls.test_group = cls.env["res.groups"].create( + { + "name": "TestGroup", + "users": [(4, cls.test_user_1.id), (4, cls.test_user_2.id)], + } + ) + # Create tier definitions: + cls.tier_def_obj = cls.env["tier.definition"] + cls.tier_definition = cls.tier_def_obj.create( + { + "model_id": cls.tester_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('test_field', '=', 1.0)]", + "sequence": 30, + } + ) + + cls.test_record = cls.test_model.create({"test_field": 1.0}) + cls.test_record_2 = cls.test_model_2.create({"test_field": 1.0}) + cls.test_record_computed = cls.test_model_computed.create({"test_field": 1.0}) + + cls.tier_def_obj.create( + { + "model_id": cls.tester_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('test_field', '>', 3.0)]", + "approve_sequence": True, + "notify_on_pending": False, + "sequence": 20, + "name": "Definition for test 19 - sequence - user 1", + } + ) + cls.tier_def_obj.create( + { + "model_id": cls.tester_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_2.id, + "definition_domain": "[('test_field', '>', 3.0)]", + "approve_sequence": True, + "notify_on_pending": True, + "sequence": 10, + "name": "Definition for test 19 - sequence - user 2", + } + ) + # Create definition for test 20 + cls.tier_def_obj.create( + { + "model_id": cls.tester_model.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('test_field', '=', 0.9)]", + "approve_sequence": False, + "notify_on_pending": True, + "sequence": 10, + "name": "Definition for test 20 - no sequence - user 1 - no sequence", + } + ) + + cls.tier_def_obj.create( + { + "model_id": cls.tester_model_computed.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[]", + "approve_sequence": True, + "notify_on_pending": False, + "sequence": 20, + "name": "Definition for computed model", + } + ) + + # Create definition for test 30, 31 + # Main company tier definition + cls.tier_def_obj.create( + { + "model_id": cls.tester_model_2.id, + "review_type": "individual", + "reviewer_id": cls.test_user_1.id, + "definition_domain": "[('test_field', '>=', 1.0)]", + "approve_sequence": True, + "notify_on_pending": False, + "sequence": 30, + "name": "Definition for test 30 - sequence - user 1 - main company", + "company_id": cls.main_company.id, + } + ) + cls.tier_def_obj.create( + { + "model_id": cls.tester_model_2.id, + "review_type": "individual", + "reviewer_id": cls.test_user_3_multi_company.id, + "definition_domain": "[('test_field', '>=', 1.0)]", + "approve_sequence": True, + "notify_on_pending": False, + "sequence": 20, + "name": "Definition for test 30 - sequence - user 3 - main company", + "company_id": cls.main_company.id, + } + ) + # Other company tier definition + cls.tier_def_obj.create( + { + "model_id": cls.tester_model_2.id, + "review_type": "individual", + "reviewer_id": cls.test_user_3_multi_company.id, + "definition_domain": "[('test_field', '>=', 1.0)]", + "approve_sequence": True, + "notify_on_pending": False, + "sequence": 30, + "name": "Definition for test 30 - sequence - user 3 - other company", + "company_id": cls.other_company.id, + } + ) + + @classmethod + def tearDownClass(cls): + cls.loader.restore_registry() + super().tearDownClass() diff --git a/base_tier_validation/tests/test_tier.py b/base_tier_validation/tests/test_tier.py new file mode 100644 index 00000000..ad6ba3a4 --- /dev/null +++ b/base_tier_validation/tests/test_tier.py @@ -0,0 +1,193 @@ +# Copyright 2024 DOB +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo_test_helper import FakeModelLoader + +from odoo.tests import new_test_user +from odoo.tests.common import TransactionCase + +from .tier_validation_tester import ( + TierDefinition, + TierValidationTester, +) + + +class TestTierDefinition(TransactionCase): + """Tests for base_tier_validation: TierDefinition creation and workflow. + + Validates: Requirements 8.1, 8.2, 8.3, 8.4 + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + cls.loader.update_registry((TierValidationTester, TierDefinition)) + + cls.test_model = cls.env[TierValidationTester._name] + cls.tester_model = cls.env["ir.model"].search( + [("model", "=", TierValidationTester._name)] + ) + + # Grant access to the fake model + cls.env["ir.model.access"].create( + { + "name": "access tier.validation.tester", + "model_id": cls.tester_model.id, + "perm_read": 1, + "perm_write": 1, + "perm_create": 1, + "perm_unlink": 1, + } + ) + + # Minimal form view to avoid auto-view issues + cls.env["ir.ui.view"].create( + { + "model": TierValidationTester._name, + "name": "test_tier_tester_form", + "arch": """
+
+
+ + + +
""", + } + ) + + # Users: reviewer (admin) and requester (regular) + cls.reviewer = new_test_user( + cls.env, + name="Reviewer", + login="tier_reviewer", + groups="base.group_system", + ) + cls.requester = new_test_user( + cls.env, + name="Requester", + login="tier_requester", + ) + + cls.tier_def_obj = cls.env["tier.definition"] + + @classmethod + def tearDownClass(cls): + cls.loader.restore_registry() + super().tearDownClass() + + def test_01_create_tier_definition(self): + """WHEN a TierDefinition is created for a model with approval levels, + base_tier_validation SHALL create the record without errors. + + Validates: Requirement 8.1 + """ + tier_def = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.reviewer.id, + "definition_domain": "[]", + "sequence": 10, + } + ) + self.assertTrue(tier_def.id, "TierDefinition should be created without errors") + self.assertEqual(tier_def.model_id, self.tester_model) + self.assertEqual(tier_def.reviewer_id, self.reviewer) + + def test_02_request_validation_creates_tier_reviews(self): + """WHEN a document is submitted for approval, + base_tier_validation SHALL create TierReview records for each level. + + Validates: Requirement 8.2 + """ + # Create two tier definitions (two approval levels) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.reviewer.id, + "definition_domain": "[('test_field', '>', 0.0)]", + "sequence": 10, + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.reviewer.id, + "definition_domain": "[('test_field', '>', 0.0)]", + "sequence": 20, + } + ) + + record = self.test_model.create({"test_field": 1.0}) + self.assertFalse(record.review_ids, "No reviews before request") + + reviews = record.with_user(self.requester).request_validation() + + self.assertTrue(reviews, "Reviews should be created after request_validation") + self.assertEqual( + len(reviews), + 2, + "One TierReview should be created per approval level", + ) + + def test_03_approve_all_tiers_sets_validated_status(self): + """WHEN all approval levels are approved, + base_tier_validation SHALL set the document validation_status to 'validated'. + + Validates: Requirement 8.3 + """ + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.reviewer.id, + "definition_domain": "[('test_field', '>', 0.0)]", + "sequence": 10, + } + ) + + record = self.test_model.create({"test_field": 1.0}) + record.with_user(self.requester).request_validation() + + record_as_reviewer = record.with_user(self.reviewer) + record_as_reviewer.validate_tier() + + self.assertEqual( + record.validation_status, + "validated", + "validation_status should be 'validated' after all tiers approved", + ) + + def test_04_reject_tier_sets_rejected_status(self): + """IF one approval level is rejected, + base_tier_validation SHALL set the document validation_status to 'rejected'. + + Validates: Requirement 8.4 + """ + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.reviewer.id, + "definition_domain": "[('test_field', '>', 0.0)]", + "sequence": 10, + } + ) + + record = self.test_model.create({"test_field": 1.0}) + record.with_user(self.requester).request_validation() + + record_as_reviewer = record.with_user(self.reviewer) + record_as_reviewer.reject_tier() + + self.assertEqual( + record.validation_status, + "rejected", + "validation_status should be 'rejected' after a tier is rejected", + ) diff --git a/base_tier_validation/tests/test_tier_validation.py b/base_tier_validation/tests/test_tier_validation.py new file mode 100644 index 00000000..0dbaef3a --- /dev/null +++ b/base_tier_validation/tests/test_tier_validation.py @@ -0,0 +1,1285 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com) +# Copyright (c) 2022 brain-tec AG (https://braintec.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from unittest import mock + +from lxml import etree + +from odoo.exceptions import ValidationError +from odoo.tests import Form +from odoo.tests.common import tagged + +from ..models.tier_validation import BASE_EXCEPTION_FIELDS as BEF +from ..models.tier_validation import TierValidation as TV +from .common import CommonTierValidation + + +@tagged("post_install", "-at_install") +class TierTierValidation(CommonTierValidation): + def test_01_auto_validation(self): + """When the user can validate all future reviews, it is not needed + to request a validation, the action can be done straight forward.""" + self.test_record.with_user(self.test_user_1.id).action_confirm() + self.assertEqual(self.test_record.state, "confirmed") + + def test_02_no_auto_validation(self): + """User with no right to validate future reviews must request a + validation.""" + with self.assertRaises(ValidationError): + self.test_record.with_user(self.test_user_2.id).action_confirm() + + def test_03_request_validation_approved(self): + """User 2 request a validation and user 1 approves it.""" + self.assertFalse(self.test_record.review_ids) + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = self.test_record.with_user(self.test_user_1.id) + record.validate_tier() + self.assertEqual(record.validation_status, "validated") + + def test_04_request_validation_rejected(self): + """Request validation, rejection and reset.""" + self.assertFalse(self.test_record.review_ids) + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = self.test_record.with_user(self.test_user_1.id) + record.reject_tier() + self.assertTrue(record.review_ids) + self.assertEqual(record.validation_status, "rejected") + record.restart_validation() + self.assertFalse(record.review_ids) + + def test_05_under_validation(self): + """Write is forbidden in a record under validation.""" + self.assertFalse(self.test_record.review_ids) + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = self.test_record.with_user(self.test_user_1.id) + with self.assertRaises(ValidationError): + record.write({"test_field": 0.5}) + + def test_06_validation_process_open(self): + """Operation forbidden while a validation process is open.""" + self.assertFalse(self.test_record.review_ids) + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = self.test_record.with_user(self.test_user_1.id) + with self.assertRaises(ValidationError): + record.action_confirm() + + def test_07_search_reviewers(self): + """Test search methods.""" + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + record = self.test_record.with_user(self.test_user_1.id) + self.assertIn(self.test_user_1, record.reviewer_ids) + res = self.test_model.search([("reviewer_ids", "in", self.test_user_1.id)]) + self.assertTrue(res) + + def test_10_systray_counter(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions for both tester models + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model_2.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + } + ) + # Request validation + self.test_record.with_user(self.test_user_2.id).request_validation() + test_record.with_user(self.test_user_2.id).request_validation() + self.test_record_2.with_user(self.test_user_2.id).request_validation() + # Get review user count as systray icon would do and check count value + docs = self.test_user_1.with_user(self.test_user_1).review_user_count() + self.assertEqual( + next(filter(lambda doc: doc["model"] == "tier.validation.tester", docs))[ + "pending_count" + ], + 2, + ) + self.assertEqual( + next(filter(lambda doc: doc["model"] == "tier.validation.tester2", docs))[ + "pending_count" + ], + 1, + ) + + def test_11_add_comment(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "has_comment": True, + } + ) + # Request validation + review = test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(review) + # Let _compute_can_review assign status 'pending' instead of waiting + review.flush_recordset() + record = test_record.with_user(self.test_user_1.id) + res = record.validate_tier() + ctx = res.get("context") + wizard = Form(self.env["comment.wizard"].with_context(**ctx)) + wizard.comment = "Test Comment" + wiz = wizard.save() + wiz.add_comment() + self.assertTrue(test_record.review_ids.filtered("comment")) + # Check notify + comment = test_record.with_user( + self.test_user_1.id + )._notify_accepted_reviews_body() + self.assertEqual(comment, "A review was accepted. (Test Comment)") + comment = test_record.with_user( + self.test_user_1.id + )._notify_rejected_review_body() + self.assertEqual(comment, "A review was rejected by John. (Test Comment)") + + def test_11_add_comment_rejection(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "has_comment": True, + } + ) + # Request validation + review = test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(review) + record = test_record.with_user(self.test_user_1.id) + res = record.reject_tier() # Rejection + ctx = res.get("context") + wizard = Form(self.env["comment.wizard"].with_context(**ctx)) + wizard.comment = "Test Comment" + wiz = wizard.save() + wiz.add_comment() + self.assertTrue(test_record.review_ids.filtered("comment")) + # Check notify + comment = test_record.with_user( + self.test_user_1.id + )._notify_accepted_reviews_body() + self.assertEqual(comment, "A review was accepted. (Test Comment)") + comment = test_record.with_user( + self.test_user_1.id + )._notify_rejected_review_body() + self.assertEqual(comment, "A review was rejected by John. (Test Comment)") + + def test_12_approve_sequence(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 30, + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_2.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 10, + } + ) + # Request validation + self.assertFalse(self.test_record.review_ids) + reviews = test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + + docs1 = self.test_user_2.with_user(self.test_user_1).review_user_count() + for doc in docs1: + self.assertEqual(doc.get("pending_count"), 1) + docs2 = self.test_user_2.with_user(self.test_user_2).review_user_count() + for doc in docs2: + self.assertEqual(doc.get("pending_count"), 0) + + record1 = test_record.with_user(self.test_user_1.id) + self.assertTrue(record1.can_review) + record2 = test_record.with_user(self.test_user_2.id) + self.assertFalse(record2.can_review) + # User 1 validates the record, 2 review should be approved. + self.assertFalse(any(r.status == "approved" for r in record1.review_ids)) + record1.validate_tier() + self.assertTrue(any(r.status == "approved" for r in record1.review_ids)) + + def test_12_approve_sequence_same_user(self): + """Similar to test_12_approve_sequence, but all same users, + the approve_sequence still apply correctly""" + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 20, + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "sequence": 10, + } + ) + # Request validation + self.assertFalse(self.test_record.review_ids) + reviews = test_record.with_user(self.test_user_1.id).request_validation() + self.assertTrue(reviews) + + record1 = test_record.with_user(self.test_user_1.id) + self.assertTrue(record1.can_review) + # Validation will be all by sequence + self.assertEqual(len(record1.review_ids), 2) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + record1.validate_tier() + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "approved")) + ) + record1.validate_tier() + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + self.assertEqual( + 2, len(record1.review_ids.filtered(lambda x: x.status == "approved")) + ) + record1.validate_tier() + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + self.assertEqual( + 2, len(record1.review_ids.filtered(lambda x: x.status == "approved")) + ) + + def test_12_approve_sequence_same_user_bypassed(self): + """Similar to test_12_approve_sequence, with all same users, + but approve_sequence_bypass is True""" + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "approve_sequence_bypass": True, + "sequence": 20, + } + ) + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + "approve_sequence_bypass": True, + "sequence": 10, + } + ) + # Request validation + self.assertFalse(self.test_record.review_ids) + reviews = test_record.with_user(self.test_user_1.id).request_validation() + self.assertTrue(reviews) + + record1 = test_record.with_user(self.test_user_1.id) + self.assertTrue(record1.can_review) + # When the first tier is validated, all the rest will be approved. + self.assertEqual(len(record1.review_ids), 2) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 1, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + record1.validate_tier() + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "pending")) + ) + self.assertEqual( + 0, len(record1.review_ids.filtered(lambda x: x.status == "waiting")) + ) + self.assertEqual( + 2, len(record1.review_ids.filtered(lambda x: x.status == "approved")) + ) + + def test_13_onchange_review_type(self): + tier_def_id = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + self.assertTrue(tier_def_id.reviewer_id) + tier_def_id.review_type = "group" + tier_def_id.onchange_review_type() + self.assertFalse(tier_def_id.reviewer_id) + + def test_14_onchange_review_type(self): + tier_def_id = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + self.assertTrue(tier_def_id.reviewer_id) + tier_def_id.review_type = "group" + tier_def_id.onchange_review_type() + self.assertFalse(tier_def_id.reviewer_id) + + def test_15_review_user_count(self): + # Create new test record + test_record = self.test_model.create({"test_field": 2.5}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_1.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "has_comment": True, + } + ) + # Request validation + review = test_record.with_user(self.test_user_2).request_validation() + self.assertTrue(review) + self.assertTrue(self.test_user_1.review_ids) + self.assertTrue(test_record.review_ids) + # Used by front-end + count = self.test_user_1.with_user(self.test_user_1).review_user_count() + self.assertEqual(len(count), 1) + # False Review - test notification message bodies + self.assertIn("created", self.test_record._notify_created_review_body()) + self.assertNotEqual(self.test_record.validation_status, "validated") + self.assertIn("requested", self.test_record._notify_requested_review_body()) + self.assertIn("rejected", self.test_record._notify_rejected_review_body()) + self.assertIn("accepted", self.test_record._notify_accepted_reviews_body()) + + def test_16_review_user_count_on_rejected(self): + """If document is rejected, it should always removed from tray""" + # Create new test record + test_record3 = self.test_model.create({"test_field": 1.0}) + # Create tier definitions + self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_2.id, + "definition_domain": "[('test_field', '=', 1.0)]", + } + ) + test_record3.with_user(self.test_user_2).request_validation() + record1 = test_record3.with_user(self.test_user_1) + self.assertTrue(record1.can_review) + self.assertTrue( + self.test_user_1.with_user(self.test_user_1).review_user_count() + ) + self.assertTrue( + self.test_user_2.with_user(self.test_user_2).review_user_count() + ) + # user 1 reject first tier + record1.reject_tier() + self.assertFalse(record1.can_review) + # both user 1 and 2 has nothing left in tray + self.assertFalse( + self.test_user_1.with_user(self.test_user_1).review_user_count() + ) + self.assertFalse( + self.test_user_2.with_user(self.test_user_2).review_user_count() + ) + + def test_17_search_records_no_validation(self): + """Search for records that have no validation process started""" + records = self.env["tier.validation.tester"].search( + [("reviewer_ids", "=", False)] + ) + self.assertEqual(len(records), 1) + self.test_record.with_user(self.test_user_2.id).request_validation() + self.test_record.with_user(self.test_user_1.id) + records = self.env["tier.validation.tester"].search( + [("reviewer_ids", "=", False)] + ) + self.assertEqual(len(records), 0) + + def test_18_test_review_by_res_users_field(self): + selected_field = self.env["ir.model.fields"].search( + [("model", "=", self.test_model._name), ("name", "=", "user_id")] + ) + test_record = self.test_model.create( + {"test_field": 2.5, "user_id": self.test_user_2.id} + ) + + definition = self.env["tier.definition"].create( + { + "model_id": self.tester_model.id, + "review_type": "field", + "reviewer_field_id": selected_field.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + + reviews = test_record.request_validation() + review = reviews.filtered(lambda r: r.definition_id == definition) + self.assertTrue(review) + self.assertEqual(review.reviewer_ids, self.test_user_2) + + def test_19_waiting_tier(self): + # Create new test record + tier_review_obj = self.env["tier.review"] + test_record = self.test_model.create({"test_field": 3.5}) + # Request validation + review = test_record.request_validation() + + self.assertTrue(review) + # both reviews should be waiting when created + review_1 = tier_review_obj.browse(review.ids[0]) + review_2 = tier_review_obj.browse(review.ids[1]) + self.assertTrue(review_1.status == "waiting") + self.assertTrue(review_2.status == "waiting") + # and then normal workflow will follow... + review_1.invalidate_model() + review_1._compute_can_review() + self.assertTrue(review_1.status == "pending") + # first reviewer does not want notifications + # chatter should be empty + self.assertFalse(test_record.message_ids) + self.assertTrue(review_1.done_by.id is False) + self.assertTrue(review_1.reviewed_date is False) + self.assertTrue(review_2.status == "waiting") + self.assertTrue(review_2.done_by.id is False) + self.assertTrue(review_2.reviewed_date is False) + record = test_record.with_user(self.test_user_1.id) + record.invalidate_model() + record.validate_tier() + self.assertTrue(review_1.status == "approved") + self.assertFalse(review_1.reviewed_date is False) + self.assertTrue(review_1.done_by.id == self.test_user_1.id) + self.assertTrue(review_2.status == "pending") + self.assertTrue(review_2.done_by.id is False) + self.assertTrue(review_2.reviewed_date is False) + + def test_20_no_sequence(self): + # Create new test record + tier_review_obj = self.env["tier.review"] + test_record2 = self.test_model.create({"test_field": 0.9}) + # request validation + review = test_record2.request_validation() + self.assertTrue(review) + review_1 = tier_review_obj.browse(review.ids[0]) + self.assertTrue(review_1.status == "waiting") + review_1.invalidate_model() + review_1._compute_can_review() + self.assertTrue(review_1.status == "pending") + msg2 = test_record2.message_ids[0].body + request = test_record2._notify_requested_review_body() + self.assertIn(request, msg2) + + def test_21_notify_on_create(self): + # notify on create + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": True, + "notify_on_accepted": False, + "notify_on_rejected": False, + "notify_on_restarted": False, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + test_record_1 = self.test_model.create({"test_field": 1}) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record_1.request_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # do not notify on create + tier_definition.write({"notify_on_create": False}) + test_record_2 = self.test_model.create({"test_field": 1}) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record_2.request_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + def test_22_notify_on_accepted(self): + self.test_user_2.write( + { + "group_ids": [(6, 0, self.env.ref("base.group_system").ids)], + } + ) + + # notify on accepted + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": False, + "notify_on_accepted": True, + "notify_on_rejected": False, + "notify_on_restarted": False, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + test_record_1 = self.test_model.create({"test_field": 1}) + test_record_1.request_validation() + record = test_record_1.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.validate_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # do not notify on accepted + tier_definition.write({"notify_on_accepted": False}) + test_record_2 = self.test_model.create({"test_field": 1}) + test_record_2.request_validation() + test_record_2.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record_2.validate_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + def test_23_notify_on_rejected(self): + self.test_user_2.write( + { + "group_ids": [(6, 0, self.env.ref("base.group_system").ids)], + } + ) + + # notify on rejected + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": False, + "notify_on_accepted": False, + "notify_on_rejected": True, + "notify_on_restarted": False, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + test_record_1 = self.test_model.create({"test_field": 1}) + test_record_1.request_validation() + record = test_record_1.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.reject_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # do not notify on rejected + tier_definition.write({"notify_on_rejected": False}) + test_record_2 = self.test_model.create({"test_field": 1}) + test_record_2.request_validation() + test_record_2.with_user(self.test_user_2.id) + + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record_2.reject_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + def test_24_notify_on_restarted(self): + self.test_user_2.write( + { + "group_ids": [(6, 0, self.env.ref("base.group_system").ids)], + } + ) + + # notify on restarted + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": False, + "notify_on_accepted": False, + "notify_on_rejected": False, + "notify_on_restarted": True, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + test_record_1 = self.test_model.create({"test_field": 1}) + test_record_1.request_validation() + record = test_record_1.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.restart_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # do not notify on restarted + tier_definition.write({"notify_on_restarted": False}) + test_record_2 = self.test_model.create({"test_field": 1}) + test_record_2.request_validation() + test_record_2.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record_2.restart_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + def test_25_all_notification(self): + self.test_user_2.write( + { + "group_ids": [(6, 0, self.env.ref("base.group_system").ids)], + } + ) + + # notify on restarted + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": True, + "notify_on_accepted": True, + "notify_on_rejected": True, + "notify_on_restarted": True, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + + test_record = self.test_model.create({"test_field": 1}) + + # request validation + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record.request_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # accept validation + record = test_record.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.validate_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # restart validation + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.restart_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + # reject validation + record.request_validation() + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.reject_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1 + 1) + + def test_26_no_notification(self): + self.test_user_2.write( + { + "group_ids": [(6, 0, self.env.ref("base.group_system").ids)], + } + ) + + # notify on restarted + tier_definition = self.env["tier.definition"].search([]) + tier_definition.write( + { + "notify_on_create": False, + "notify_on_accepted": False, + "notify_on_rejected": False, + "notify_on_restarted": False, + "review_type": "group", + "reviewer_group_id": self.env.ref("base.group_system").id, + } + ) + + test_record = self.test_model.create({"test_field": 1}) + + # request validation + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + test_record.request_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + # accept validation + record = test_record.with_user(self.test_user_2.id) + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.validate_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + # restart validation + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.restart_validation() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + # reject validation + record.request_validation() + notifications_no_1 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + record.reject_tier() + notifications_no_2 = len( + self.env["mail.notification"].search( + [("res_partner_id", "=", self.test_user_1.partner_id.id)] + ) + ) + self.assertEqual(notifications_no_2, notifications_no_1) + + def test_27_change_field_exception_validation(self): + """Test under and after validations""" + # Cannot create `tier.validation.exception` records because + # `tier.validation.tester` are fake model and its fields are + # not propagated to the DDBB and cannot read from `ir.model.fields`. + # We will use the mock.patch instead. + _tvf = ["test_validation_field"] + _rv = _tvf + BEF + self.assertEqual(self.test_record.test_validation_field, 0) + self.assertFalse(self.test_record.review_ids) + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + self.assertTrue(reviews) + self.assertTrue(self.test_record.review_ids) + # Unable to write test_validation_field under validation + with self.assertRaises(ValidationError): + self.test_record.with_user(self.test_user_2.id).write( + {"test_validation_field": 1} + ) + # Able to write test_validation_field under validation + with mock.patch.object( + TV, "_get_under_validation_exceptions", return_value=_rv + ): + self.test_record.with_user(self.test_user_2.id).write( + {"test_validation_field": 2} + ) + self.assertEqual(self.test_record.test_validation_field, 2) + # Validate record + record = self.test_record.with_user(self.test_user_1.id) + record.validate_tier() + record.action_confirm() + self.assertEqual(record.validation_status, "validated") + # Unable to write test_validation_field after validation + with self.assertRaises(ValidationError): + # Simulate there are fields, but not test_validation_field + with mock.patch.object(TV, "_get_validation_exceptions", return_value=BEF): + self.test_record.with_user(self.test_user_2.id).write( + {"test_validation_field": 3} + ) + # Able to write test_validation_field after validation + with mock.patch.multiple( + TV, + _get_validation_exceptions=mock.MagicMock(return_value=_tvf), + _get_after_validation_exceptions=mock.MagicMock(return_value=_rv), + ): + self.test_record.with_user(self.test_user_2.id).write( + {"test_validation_field": 4} + ) + self.assertEqual(self.test_record.test_validation_field, 4) + + def test_28_computed_state_field(self): + """Test the regular flow on a model where state is a computed field""" + # The record cannot be confirmed without validation + with self.assertRaisesRegex( + ValidationError, + "This action needs to be validated", + ): + with self.env.cr.savepoint(): + self.test_record_computed.action_confirm() + # Flush manually to trigger the _write + self.test_record_computed.flush_recordset() + self.assertEqual(self.test_record_computed.state, "draft") + # The validation is performed + self.test_record_computed.request_validation() + self.test_record_computed.invalidate_recordset() + self.assertEqual(self.test_record_computed.review_ids.status, "waiting") + self.test_record_computed.with_user(self.test_user_1).validate_tier() + self.test_record_computed.invalidate_recordset() + self.assertEqual(self.test_record_computed.review_ids.status, "approved") + # After validation, the record can be confirmed + self.test_record_computed.action_confirm() + self.test_record_computed.flush_recordset() + self.assertEqual(self.test_record_computed.state, "confirmed") + # After cancelling, the reviews are removed + self.test_record_computed.action_cancel() + self.test_record_computed.flush_recordset() + self.assertFalse(self.test_record_computed.review_ids) + self.test_record_computed.invalidate_recordset() + + def test_29_allow_write_for_reviewers(self): + reviews = self.test_record.with_user(self.test_user_2.id).request_validation() + record = self.test_record.with_user(self.test_user_1.id) + record.invalidate_recordset() + with self.assertRaises(ValidationError): + record.with_user(self.test_user_1.id).write({"test_field": 0.3}) + reviews.definition_id.with_user(self.test_user_1.id).write( + {"allow_write_for_reviewer": True} + ) + record.with_user(self.test_user_1.id).write({"test_field": 0.3}) + + def test_30_request_validation_diff_company(self): + """ + Test validation request behavior with multi-company setup. + + Setup: + - Main company has 2 tier definitions: + - One for User1 (sequence 30) + - One for User3 (sequence 20) + - Other company has 1 tier definition: + - One for User3 (sequence 30) + + When record's company is set to 'other company': + - Only User3's tier definition from other company should be applied + - Should create only 1 review + """ + self.assertFalse(self.test_record_2.review_ids) + self.assertFalse(self.test_record_2.company_id) + self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company) + + self.test_record_2.company_id = self.other_company + + reviews = self.test_record_2.with_user( + self.test_user_3_multi_company.id + ).request_validation() + + self.assertEqual(len(reviews), 1) + + def test_31_request_validation_same_company(self): + """ + Test validation request behavior with multi-company setup. + + Setup: + - Main company has 2 tier definitions: + - One for User1 (sequence 30) + - One for User3 (sequence 20) + - Other company has 1 tier definition: + - One for User3 (sequence 30) + + When record's company is set to 'main company': + - Both User1 and User3's tier definitions from main company should be applied + - Should create 2 reviews + """ + self.assertFalse(self.test_record_2.review_ids) + self.assertFalse(self.test_record_2.company_id) + self.assertEqual(self.test_user_3_multi_company.env.company, self.main_company) + + self.test_record_2.company_id = self.main_company + + reviews = self.test_record_2.with_user( + self.test_user_3_multi_company.id + ).request_validation() + + self.assertEqual(len(reviews), 2) + + def test_30_request_validation(self): + # Create new test record + test_record = self.test_model.create({"test_field": 1.0}) + # Create tier definitions for both tester models + self.tier_definition.write( + { + "approve_sequence": True, + "notify_on_create": True, + } + ) + def_2 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_2.id, + "sequence": 20, + "approve_sequence": True, + "notify_on_create": False, + "notify_on_accepted": True, + } + ) + def_3 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_3_multi_company.id, + "sequence": 10, + "approve_sequence": True, + "notify_on_create": False, + "notify_on_accepted": True, + } + ) + mt_tier_validation_requested = self.env.ref( + "base_tier_validation.mt_tier_validation_requested" + ) + mt_tier_validation_accepted = self.env.ref( + "base_tier_validation.mt_tier_validation_accepted" + ) + test_record.request_validation() + review_1 = test_record.review_ids.filtered( + lambda x: x.definition_id == self.tier_definition + ) + self.assertEqual(review_1.status, "pending") + review_2 = test_record.review_ids.filtered(lambda x: x.definition_id == def_2) + self.assertEqual(review_2.status, "waiting") + review_3 = test_record.review_ids.filtered(lambda x: x.definition_id == def_3) + self.assertEqual(review_3.status, "waiting") + followers = test_record.message_follower_ids + self.assertIn(self.test_user_1.partner_id, followers.mapped("partner_id")) + follower_1 = followers.filtered( + lambda x: x.partner_id == self.test_user_1.partner_id + ) + self.assertIn(mt_tier_validation_requested, follower_1.subtype_ids) + self.assertNotIn(mt_tier_validation_accepted, follower_1.subtype_ids) + self.assertNotIn(self.test_user_2.partner_id, followers.mapped("partner_id")) + self.assertNotIn( + self.test_user_3_multi_company.partner_id, followers.mapped("partner_id") + ) + old_messages = test_record.message_ids + test_record.with_user(self.test_user_1).validate_tier() + new_messages = test_record.message_ids - old_messages + self.assertEqual(len(new_messages), 1) + self.assertEqual(new_messages.subtype_id, mt_tier_validation_accepted) + self.assertEqual(self.test_user_2.partner_id, new_messages.notified_partner_ids) + self.assertEqual(review_1.status, "approved") + self.assertEqual(review_2.status, "pending") + self.assertEqual(review_3.status, "waiting") + followers = test_record.message_follower_ids + self.assertIn(self.test_user_1.partner_id, followers.mapped("partner_id")) + self.assertIn(self.test_user_2.partner_id, followers.mapped("partner_id")) + follower_2 = followers.filtered( + lambda x: x.partner_id == self.test_user_2.partner_id + ) + self.assertNotIn(mt_tier_validation_requested, follower_2.subtype_ids) + self.assertIn(mt_tier_validation_accepted, follower_2.subtype_ids) + self.assertNotIn( + self.test_user_3_multi_company.partner_id, followers.mapped("partner_id") + ) + old_messages = test_record.message_ids + test_record.with_user(self.test_user_2).validate_tier() + new_messages = test_record.message_ids - old_messages + self.assertEqual(len(new_messages), 1) + self.assertEqual(new_messages.subtype_id, mt_tier_validation_accepted) + self.assertEqual( + self.test_user_3_multi_company.partner_id, new_messages.notified_partner_ids + ) + self.assertEqual(review_1.status, "approved") + self.assertEqual(review_2.status, "approved") + self.assertEqual(review_3.status, "pending") + followers = test_record.message_follower_ids + self.assertIn(self.test_user_1.partner_id, followers.mapped("partner_id")) + self.assertIn(self.test_user_2.partner_id, followers.mapped("partner_id")) + self.assertIn( + self.test_user_3_multi_company.partner_id, followers.mapped("partner_id") + ) + follower_3 = followers.filtered( + lambda x: x.partner_id == self.test_user_3_multi_company.partner_id + ) + self.assertNotIn(mt_tier_validation_requested, follower_3.subtype_ids) + self.assertIn(mt_tier_validation_accepted, follower_3.subtype_ids) + old_messages = test_record.message_ids + test_record.with_user(self.test_user_3_multi_company).validate_tier() + new_messages = test_record.message_ids - old_messages + self.assertEqual(len(new_messages), 0) + + def test_31_request_validation(self): + # Create new test record + test_record = self.test_model.create({"test_field": 1.0}) + # Create tier definitions for both tester models + self.tier_definition.write( + { + "approve_sequence": True, + "notify_on_create": True, + } + ) + def_2 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_2.id, + "sequence": 20, + "approve_sequence": True, + "notify_on_create": True, + "notify_on_accepted": True, + } + ) + def_3 = self.tier_def_obj.create( + { + "model_id": self.tester_model.id, + "review_type": "individual", + "reviewer_id": self.test_user_3_multi_company.id, + "sequence": 10, + "approve_sequence": True, + "notify_on_create": True, + "notify_on_accepted": True, + } + ) + test_record.request_validation() + review_1 = test_record.review_ids.filtered( + lambda x: x.definition_id == self.tier_definition + ) + self.assertEqual(review_1.status, "pending") + review_2 = test_record.review_ids.filtered(lambda x: x.definition_id == def_2) + self.assertEqual(review_2.status, "waiting") + review_3 = test_record.review_ids.filtered(lambda x: x.definition_id == def_3) + self.assertEqual(review_3.status, "waiting") + followers = test_record.message_follower_ids + self.assertIn(self.test_user_1.partner_id, followers.mapped("partner_id")) + self.assertIn(self.test_user_2.partner_id, followers.mapped("partner_id")) + self.assertIn( + self.test_user_3_multi_company.partner_id, followers.mapped("partner_id") + ) + + def test_32_test_review_by_res_groups_field(self): + """Test using field-based validation with groups""" + selected_field = self.env["ir.model.fields"].search( + [("model", "=", self.test_model._name), ("name", "=", "group_id")] + ) + test_record = self.test_model.create( + {"test_field": 2.5, "group_id": self.test_group.id} + ) + + definition = self.env["tier.definition"].create( + { + "model_id": self.tester_model.id, + "review_type": "field", + "reviewer_field_id": selected_field.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + + reviews = test_record.request_validation() + review = reviews.filtered(lambda r: r.definition_id == definition) + self.assertTrue(review) + self.assertEqual(review.reviewer_ids, self.test_user_2 | self.test_user_1) + + def test_33_test_review_by_wrong_field_type(self): + """Test using field-based validation with groups""" + selected_field = self.env["ir.model.fields"].search( + [("model", "=", self.test_model._name), ("name", "=", "menu_id")] + ) + test_record = self.test_model.create( + { + "test_field": 2.5, + "menu_id": self.env["ir.ui.menu"].search([], limit=1).id, + } + ) + self.assertTrue(test_record.menu_id) + self.env["tier.definition"].create( + { + "model_id": self.tester_model.id, + "review_type": "field", + "reviewer_field_id": selected_field.id, + "definition_domain": "[('test_field', '>', 1.0)]", + "approve_sequence": True, + } + ) + with self.assertRaisesRegex( + ValidationError, + "Validation reviewer field should be of the appropriate type", + ): + test_record.request_validation() + + +@tagged("at_install") +class TierTierValidationView(CommonTierValidation): + def test_view_manual(self): + view = self.env[self.test_record._name].get_view(False, "form") + with Form(self.test_record) as f: + self.assertNotIn("review_ids", f._values) + form = etree.fromstring(view["arch"]) + self.assertFalse(form.xpath("//field[@name='review_ids']")) + self.assertFalse(form.xpath("//field[@name='can_review']")) + self.assertFalse(form.xpath("//button[@name='request_validation']")) + + def test_view_automatic(self): + view = self.env[self.test_record_2._name].get_view(False, "form") + with Form(self.test_record_2) as f: + self.assertIn("review_ids", f._values) + form = etree.fromstring(view["arch"]) + self.assertTrue(form.xpath("//field[@name='review_ids']")) + self.assertTrue(form.xpath("//field[@name='can_review']")) + self.assertTrue(form.xpath("//button[@name='request_validation']")) + + def test_get_view(self): + view = self.test_record_2.get_view() + model = "tier.validation.tester2" + self.assertEqual(view["model"], model) + self.assertEqual(view["models"].keys(), {model, "tier.review"}) + self.assertIn("id", view["models"][model]) + self.assertIn("need_validation", view["models"][model]) + self.assertIn("next_review", view["models"][model]) + self.assertIn("review_ids", view["models"][model]) diff --git a/base_tier_validation/tests/test_tier_validation_reminder.py b/base_tier_validation/tests/test_tier_validation_reminder.py new file mode 100644 index 00000000..08979a58 --- /dev/null +++ b/base_tier_validation/tests/test_tier_validation_reminder.py @@ -0,0 +1,46 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from freezegun import freeze_time + +from odoo import fields +from odoo.tests.common import tagged + +from .common import CommonTierValidation + + +@tagged("post_install", "-at_install") +class TierTierValidation(CommonTierValidation): + def test_validation_reminder(self): + """Check the posting of reminder to reviews.""" + tier_definition = self.tier_definition + tier_definition.notify_reminder_delay = 3 + + # Request a review today + self.test_record.with_user(self.test_user_2.id).request_validation() + review = self.env["tier.review"].search( + [("definition_id", "=", tier_definition.id)] + ) + self.assertTrue(review) + self.assertEqual(review.last_reminder_date, False) + + # 2 days later no reminder should be posted + in_2_days = fields.Datetime.add(fields.Datetime.now(), days=2) + with freeze_time(in_2_days): + tier_definition._cron_send_review_reminder() + self.assertEqual(review.last_reminder_date, False) + # 4 days later first reminder + in_4_days = fields.Datetime.add(fields.Datetime.now(), days=4) + with freeze_time(in_4_days): + self.tier_definition._cron_send_review_reminder() + self.assertEqual(review.last_reminder_date, in_4_days) + # 5 days later no new reminder + in_6_days = fields.Datetime.add(fields.Datetime.now(), days=6) + with freeze_time(in_6_days): + self.tier_definition._cron_send_review_reminder() + self.assertEqual(review.last_reminder_date, in_4_days) + # 9 days later second reminder + in_9_days = fields.Datetime.add(fields.Datetime.now(), days=9) + with freeze_time(in_9_days): + self.tier_definition._cron_send_review_reminder() + self.assertEqual(review.last_reminder_date, in_9_days) diff --git a/base_tier_validation/tests/tier_validation_tester.py b/base_tier_validation/tests/tier_validation_tester.py new file mode 100644 index 00000000..85cc08a8 --- /dev/null +++ b/base_tier_validation/tests/tier_validation_tester.py @@ -0,0 +1,118 @@ +# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class TierValidationTester(models.Model): + _name = "tier.validation.tester" + _description = "Tier Validation Tester" + _inherit = ["tier.validation", "mail.thread"] + _tier_validation_manual_config = True + + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("cancel", "Cancel"), + ], + default="draft", + ) + test_validation_field = fields.Integer(default=0) + test_field = fields.Float() + user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users") + group_id = fields.Many2one("res.groups", string="Assigned to (group)") + menu_id = fields.Many2one( + "ir.ui.menu", help="For testing choosing a wrong field type" + ) + + def action_confirm(self): + self.write({"state": "confirmed"}) + + +class TierValidationTester2(models.Model): + _name = "tier.validation.tester2" + _description = "Tier Validation Tester 2" + _inherit = ["tier.validation"] + _tier_validation_manual_config = False + + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("cancel", "Cancel"), + ], + default="draft", + ) + test_field = fields.Float() + test_validation_field = fields.Float() + user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users") + company_id = fields.Many2one(comodel_name="res.company") + + def action_confirm(self): + self.write({"state": "confirmed"}) + + +class TierValidationTesterComputed(models.Model): + _name = "tier.validation.tester.computed" + _description = "Tier Validation Tester Computed" + _inherit = ["tier.validation"] + _tier_validation_manual_config = False + _tier_validation_state_field_is_computed = True + + confirmed = fields.Boolean() + cancelled = fields.Boolean() + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("cancel", "Cancel"), + ], + compute="_compute_state", + store=True, + ) + test_field = fields.Float() + test_validation_field = fields.Float() + user_id = fields.Many2one(string="Assigned to:", comodel_name="res.users") + + @api.model + def _get_after_validation_exceptions(self): + return super()._get_after_validation_exceptions() + [ + "confirmed", + "cancelled", + ] + + @api.model + def _get_under_validation_exceptions(self): + return super()._get_under_validation_exceptions() + [ + "confirmed", + "cancelled", + ] + + @api.depends("confirmed", "cancelled") + def _compute_state(self): + for rec in self: + if rec.cancelled: + rec.state = "cancel" + elif rec.confirmed: + rec.state = "confirmed" + else: + rec.state = "draft" + + def action_confirm(self): + self.write({"confirmed": True}) + + def action_cancel(self): + self.write({"cancelled": True}) + + +class TierDefinition(models.Model): + _inherit = "tier.definition" + + @api.model + def _get_tier_validation_model_names(self): + res = super()._get_tier_validation_model_names() + res.append("tier.validation.tester") + res.append("tier.validation.tester2") + res.append("tier.validation.tester.computed") + return res diff --git a/base_tier_validation/views/res_config_settings_views.xml b/base_tier_validation/views/res_config_settings_views.xml new file mode 100644 index 00000000..0c3cbd92 --- /dev/null +++ b/base_tier_validation/views/res_config_settings_views.xml @@ -0,0 +1,54 @@ + + + + + + res.config.settings.view.form.budget + res.config.settings + + + + +
+ + + +
+ Option to use python formula to get reviewers and find documents +
+
+ + + +
+
+
+
+
+
diff --git a/base_tier_validation/views/tier_definition_view.xml b/base_tier_validation/views/tier_definition_view.xml new file mode 100644 index 00000000..26d7422e --- /dev/null +++ b/base_tier_validation/views/tier_definition_view.xml @@ -0,0 +1,162 @@ + + + + + tier.definition.list + tier.definition + + + + + + + + + + + + + + + + + + + tier.definition.form + tier.definition + +
+ +
+ +
+ Name +

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tier.definition.search + tier.definition + + + + + + + + + + + + + + + + + Tier Definition + ir.actions.act_window + tier.definition + list,form + {'search_default_all': 1} + + + + diff --git a/base_tier_validation/views/tier_review_view.xml b/base_tier_validation/views/tier_review_view.xml new file mode 100644 index 00000000..e0cf2509 --- /dev/null +++ b/base_tier_validation/views/tier_review_view.xml @@ -0,0 +1,25 @@ + + + + + tier.review.list + tier.review + + + + + + + + + + + + + + + diff --git a/base_tier_validation/views/tier_validation_exception_view.xml b/base_tier_validation/views/tier_validation_exception_view.xml new file mode 100644 index 00000000..506e312d --- /dev/null +++ b/base_tier_validation/views/tier_validation_exception_view.xml @@ -0,0 +1,123 @@ + + + + + tier.validation.exception.list + tier.validation.exception + + + + + + + + + + + + + + + tier.validation.exception.form + tier.validation.exception + +
+ +
+
+ + + + + + + + + + + + +
+
+
+
+ + + tier.validation.exception.search + tier.validation.exception + + + + + + + + + + + + + + + + + + + + Tier Validation Exception + ir.actions.act_window + tier.validation.exception + list,form + +

Create a new Validation Exception!

+

Once created, you can decide which fields you want to be editable when the record:

+
    +
  • It's in the validation process
  • +
  • It's fully validated
  • +
+
+
+ + +
diff --git a/base_tier_validation/wizard/__init__.py b/base_tier_validation/wizard/__init__.py new file mode 100644 index 00000000..92bd0df5 --- /dev/null +++ b/base_tier_validation/wizard/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import comment_wizard diff --git a/base_tier_validation/wizard/comment_wizard.py b/base_tier_validation/wizard/comment_wizard.py new file mode 100644 index 00000000..5c5a6c93 --- /dev/null +++ b/base_tier_validation/wizard/comment_wizard.py @@ -0,0 +1,25 @@ +# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class CommentWizard(models.TransientModel): + _name = "comment.wizard" + _description = "Comment Wizard" + + validate_reject = fields.Char() + res_model = fields.Char() + res_id = fields.Integer() + review_ids = fields.Many2many(comodel_name="tier.review") + comment = fields.Char(required=True) + + def add_comment(self): + self.ensure_one() + rec = self.env[self.res_model].browse(self.res_id) + self.review_ids.write({"comment": self.comment}) + if self.validate_reject == "validate": + rec._validate_tier(self.review_ids) + if self.validate_reject == "reject": + rec._rejected_tier(self.review_ids) + rec._update_counter({"review_deleted": True}) diff --git a/base_tier_validation/wizard/comment_wizard_view.xml b/base_tier_validation/wizard/comment_wizard_view.xml new file mode 100644 index 00000000..70c1a928 --- /dev/null +++ b/base_tier_validation/wizard/comment_wizard_view.xml @@ -0,0 +1,26 @@ + + + + + Comment Wizard + comment.wizard + form + +
+ + + +
+
+
+
+
+
diff --git a/base_user_role/README.rst b/base_user_role/README.rst new file mode 100644 index 00000000..6ae4a1bd --- /dev/null +++ b/base_user_role/README.rst @@ -0,0 +1,179 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +========== +User roles +========== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b3aa00f609d45dcd82a69b2a3e13b327096ab1d25883b543e3e45538e854d40c + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/license-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--backend-lightgray.png?logo=github + :target: https://github.com/OCA/server-backend/tree/18.0/base_user_role + :alt: OCA/server-backend +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-backend-18-0/server-backend-18-0-base_user_role + :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-backend&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module was written to extend the standard functionality regarding +users and groups management. It helps creating well-defined user roles +and associating them to users. + +It can become very hard to maintain a large number of user profiles over +time, juggling with many technical groups. For this purpose, this module +will help you to: + + - define functional roles by aggregating low-level groups, + - set user accounts with the predefined roles (roles are cumulative), + - update groups of all relevant user accounts (all at once), + - ensure that user accounts will have the groups defined in their + roles (nothing more, nothing less). In other words, you can not set + groups manually on a user as long as there is roles configured on + it, + - activate/deactivate roles depending on the date (useful to plan + holidays, etc) + - get a quick overview of roles and the related user accounts. + +That way you make clear the different responsabilities within a company, +and are able to add and update user accounts in a scalable and reliable +way. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to go to *Settings / Users / Roles*, +and create a new role. From there, you can add groups to compose your +role, and then associate users to it. + +You can also define default roles for a new user by editing the user +called "Default User". + +Roles: + +|image1| + +Add groups: + +|image2| + +Add users (with dates or not): + +|image3| + +Instead of creating roles from scratch, it is possible to create a role +based on the groups of an existing user: select or open the user and +choose "Create role from user" in the action menu. + +.. |image1| image:: https://raw.githubusercontent.com/OCA/server-backend/16.0/base_user_role/static/description/roles.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/server-backend/16.0/base_user_role/static/description/role_groups.png +.. |image3| image:: https://raw.githubusercontent.com/OCA/server-backend/16.0/base_user_role/static/description/role_users.png + +Usage +===== + +To use this module, you need to: + +1. Go to Configuration / Users / Users choose user and set Roles: + +|image| + +.. |image| image:: https://raw.githubusercontent.com/OCA/server-backend/base_user_role/static/description/user_form.png + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* ABF OSIELL + +Contributors +------------ + +- Sébastien Alix +- Duc, Dao Dong + (https://komit-consulting.com) +- Jean-Charles Drubay + (https://komit-consulting.com) +- Alan Ramos (https://www.jarsa.com.mx) +- Harald Panten +- Kevin Khao +- Tatiana Deribina (https://sprintit.fi) +- Guillem Casassas +- Guillaume Pothier + +Do not contact contributors directly about support or help with +technical issues. + +Other credits +------------- + +Images +~~~~~~ + +- Oxygen Team: + `Icon `__ + (LGPL) + +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-sebalix| image:: https://github.com/sebalix.png?size=40px + :target: https://github.com/sebalix + :alt: sebalix +.. |maintainer-jcdrubay| image:: https://github.com/jcdrubay.png?size=40px + :target: https://github.com/jcdrubay + :alt: jcdrubay +.. |maintainer-novawish| image:: https://github.com/novawish.png?size=40px + :target: https://github.com/novawish + :alt: novawish + +Current `maintainers `__: + +|maintainer-sebalix| |maintainer-jcdrubay| |maintainer-novawish| + +This module is part of the `OCA/server-backend `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_user_role/__init__.py b/base_user_role/__init__.py new file mode 100644 index 00000000..aee8895e --- /dev/null +++ b/base_user_role/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/base_user_role/__manifest__.py b/base_user_role/__manifest__.py new file mode 100644 index 00000000..624677cd --- /dev/null +++ b/base_user_role/__manifest__.py @@ -0,0 +1,30 @@ +# Copyright 2014 ABF OSIELL +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +{ + "name": "User roles", + "version": "19.0.1.0.5", + "category": "Tools", + "author": "ABF OSIELL, Odoo Community Association (OCA)", + "license": "LGPL-3", + "development_status": "Production/Stable", + "maintainers": ["sebalix", "jcdrubay", "novawish"], + "website": "https://github.com/OCA/server-backend", + "depends": ["base"], + "data": [ + "security/ir.model.access.csv", + "data/ir_cron.xml", + "data/ir_module_category.xml", + "wizards/role_add_users_wizard_views.xml", + "views/role.xml", + "views/user.xml", + "views/group.xml", + "wizards/create_from_user.xml", + "wizards/wizard_groups_into_role.xml", + ], + "demo": [ + "demo/demo.xml", + ], + "installable": True, +} diff --git a/base_user_role/data/ir_cron.xml b/base_user_role/data/ir_cron.xml new file mode 100644 index 00000000..a2950d69 --- /dev/null +++ b/base_user_role/data/ir_cron.xml @@ -0,0 +1,15 @@ + + + + + Update user roles + 3 + hours + True + + code + model.cron_update_users() + + diff --git a/base_user_role/data/ir_module_category.xml b/base_user_role/data/ir_module_category.xml new file mode 100644 index 00000000..21049378 --- /dev/null +++ b/base_user_role/data/ir_module_category.xml @@ -0,0 +1,15 @@ + + + + + + User roles + + diff --git a/base_user_role/demo/demo.xml b/base_user_role/demo/demo.xml new file mode 100644 index 00000000..9344780b --- /dev/null +++ b/base_user_role/demo/demo.xml @@ -0,0 +1,18 @@ + + + + + + + + Менеджер по продажам (демо) + + + + + Бухгалтер (демо) + + + + diff --git a/base_user_role/i18n/am.po b/base_user_role/i18n/am.po new file mode 100644 index 00000000..dd156b7f --- /dev/null +++ b/base_user_role/i18n/am.po @@ -0,0 +1,428 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n" +"Language: am\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/ar.po b/base_user_role/i18n/ar.po new file mode 100644 index 00000000..e572a5bd --- /dev/null +++ b/base_user_role/i18n/ar.po @@ -0,0 +1,434 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# SaFi J. , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: SaFi J. , 2016\n" +"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\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 && n%100<=99 ? 4 : 5;\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "اسم العرض" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "المعرف" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "الاسم" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "المستخدم" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "المستخدمون" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "المستخدمون" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "طرق العرض" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "آخر تعديل في" diff --git a/base_user_role/i18n/base_user_role.pot b/base_user_role/i18n/base_user_role.pot new file mode 100644 index 00000000..fe7fea4f --- /dev/null +++ b/base_user_role/i18n/base_user_role.pot @@ -0,0 +1,423 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to" +" this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is" +" inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/bg.po b/base_user_role/i18n/bg.po new file mode 100644 index 00000000..aa393864 --- /dev/null +++ b/base_user_role/i18n/bg.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Bulgarian (https://www.transifex.com/oca/teams/23907/bg/)\n" +"Language: bg\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Име за показване" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Последно обновено от" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Последно обновено на" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Име" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Изгледи" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Последно обновено на" diff --git a/base_user_role/i18n/bs.po b/base_user_role/i18n/bs.po new file mode 100644 index 00000000..be8d2802 --- /dev/null +++ b/base_user_role/i18n/bs.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Bosnian (https://www.transifex.com/oca/teams/23907/bs/)\n" +"Language: bs\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Prikaži naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Ime" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Korisnik" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Pogledi" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnje mijenjano" diff --git a/base_user_role/i18n/ca.po b/base_user_role/i18n/ca.po new file mode 100644 index 00000000..19db5c20 --- /dev/null +++ b/base_user_role/i18n/ca.po @@ -0,0 +1,442 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:44+0000\n" +"PO-Revision-Date: 2022-04-13 12:05+0000\n" +"Last-Translator: pablontura \n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Controls d'accés" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menú d'accés" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplicació" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Categoria associada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Grup associat" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Categoria del grup associat" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Índex de colors" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Veure el nom" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Habilitat" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "De" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nom del grup" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grup creat per establir drets d'accés per compartir dades amb alguns usuaris." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grups" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Hereta" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Notes internes" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Darrera Actualització per" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Darrera Actualització el" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nom" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Línies de rol" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Normes" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Comparteix el grup" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "A" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Hereta transitivament" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Actualitzar els rols d'usuari" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuari" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Rols d'usuari" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Usuaris" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Usuaris associats a un rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Llista d'usuaris" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Els usuaris d'aquest grup hereten automàticament aquests grups" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistes" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Rols" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "Els rols es poden assignar a un usuari només una vegada a la vegada" + +#~ msgid "User role" +#~ msgstr "Rol d'usuari" + +#~ msgid "Last Modified on" +#~ msgstr "Darrera modificació el" diff --git a/base_user_role/i18n/cs.po b/base_user_role/i18n/cs.po new file mode 100644 index 00000000..0145397b --- /dev/null +++ b/base_user_role/i18n/cs.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Jaroslav Helemik Nemec , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Jaroslav Helemik Nemec , 2016\n" +"Language-Team: Czech (https://www.transifex.com/oca/teams/23907/cs/)\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Vytvořil(a)" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Vytvořeno" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Zobrazovaný název" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Naposled upraveno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Naposled upraveno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Název" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Uživatel" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Zobrazení" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Naposled upraveno" diff --git a/base_user_role/i18n/da.po b/base_user_role/i18n/da.po new file mode 100644 index 00000000..1e4ccc5a --- /dev/null +++ b/base_user_role/i18n/da.po @@ -0,0 +1,449 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2018-08-30 08:00+0000\n" +"Last-Translator: Hans Henrik Gabelgaard \n" +"Language-Team: Danish (https://www.transifex.com/oca/teams/23907/da/)\n" +"Language: da\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 3.1.1\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Adgangskontrol" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menu adgang" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Applikation" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated category" +msgstr "Tilhørende gruppe" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Tilhørende gruppe" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated group's category" +msgstr "Tilhørende gruppe" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Farve indeks" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Kommentar" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Vist navn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Slået til" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Fra" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Gruppenavn" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Gruppe oprettet for at sætte adgangsrettigheder for deling af data med " +"udvalgte brugere." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "Id" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Arver" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Navn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rolle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Rollelinier" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regler" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Gruppe for data deling" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Til" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Transitivt arver" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Opdater brugerroller" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Bruger" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Brugerroller" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Brugere" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Brugere tilknyttet til en rolle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Brugerroller" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Bruger af denne gruppe arver automatisk disse grupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Oversigter" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Roller" + +#~ msgid "User role" +#~ msgstr "Brugerrolle" + +#~ msgid "Last Modified on" +#~ msgstr "Sidst ændret den" + +#~ msgid "If checked, this group is usable as a portal." +#~ msgstr "Hvis slået til kan denne gruppe anvendes som portal." + +#~ msgid "Portal" +#~ msgstr "Portal" diff --git a/base_user_role/i18n/de.po b/base_user_role/i18n/de.po new file mode 100644 index 00000000..93372312 --- /dev/null +++ b/base_user_role/i18n/de.po @@ -0,0 +1,445 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +# Rudolf Schnapka , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-10 00:47+0000\n" +"PO-Revision-Date: 2025-10-28 12:42+0000\n" +"Last-Translator: c2cdidier \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" +"X-Generator: Weblate 5.10.4\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "Benutzerrollen" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "%s (Kopie)" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" +"Alle hier vorgenommenen Konfigurationsänderungen werden nicht dauerhaft " +"gespeichert." + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" +"Die Zugriffsrechte dieses Benutzers werden über Rollen verwaltet." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "Maximale Gültigkeitsdauer von API-Schlüsseln in Tagen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Zugriffskontrolle" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Zugriffsgruppen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menüzugriff" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Berechtigungen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Aktiv" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Anwendung" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Benutzer zuweisen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Zugewiesene Gruppe" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Zugewiesene Gruppe" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Kategorie der zugehörigen Gruppe" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "Abbrechen" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Schliessen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Farbindex" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Bemerkung" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Erstellen" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Rolle erstellen" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Rolle aus Benutzer erstellen" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Rolle aus Benutzerassistent erstellen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" +"Legt die maximale Gültigkeitsdauer eines API-Schlüssels fest, der von einem " +"Benutzer dieser Gruppe erstellt wurde." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Aktiviert" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Ab" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Gruppenname" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Gruppe erstellt, um Zugriffsrechte für die gemeinsame Nutzung von Daten mit " +"bestimmten Benutzern festzulegen." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Gruppen in eine Rolle gruppieren" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" +"Gruppen in eine Rolle gruppieren und einen Namen für diese Rolle festlegen" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Gruppen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Erbt" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Interne Notizen" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Umgekehrte Beziehung für das Feld „Erbt von“. Die Gruppen, von denen diese " +"Gruppe erbt." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zuletzt geändert durch" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zuletzt geändert am" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Anzahl der Zugriffe auf das Modell" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Name" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Elterngruppen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Eltern" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Datensatzregeln" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Beziehung für die Gruppen, die eine Rolle repräsentieren" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rolle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Rollenzeilen" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Rollen, in denen die Gruppe involviert ist" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regeln" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Regelnanzahl" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Gruppe teilen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "Warnung anzeigen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Bis" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Transitiv vererbt" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Benutzerrollen aktualisieren" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Benutzer" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "Benutzerrolle" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "Benutzerrollen" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Benutzerrollen" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" +"Benutzerrollen können einem Benutzer jeweils nur einmal zugewiesen werden" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Benutzer" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Einer Rolle zugeordnete Anwender" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Benutzerliste" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Anwender dieser Gruppe erben automatisch jene Gruppen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Ansichten" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "oder" + +#~ msgid "Last Modified on" +#~ msgstr "Zuletzt geändert am" diff --git a/base_user_role/i18n/el_GR.po b/base_user_role/i18n/el_GR.po new file mode 100644 index 00000000..187d61cf --- /dev/null +++ b/base_user_role/i18n/el_GR.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Kostas Goutoudis , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Kostas Goutoudis , 2016\n" +"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/" +"el_GR/)\n" +"Language: el_GR\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από " + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Από" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "Κωδικός" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Τελευταία ενημέρωση από" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Τελευταία ενημέρωση στις" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Ονομασία" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Χρήστες" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Χρήστες" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Προβολές" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/en_GB.po b/base_user_role/i18n/en_GB.po new file mode 100644 index 00000000..273f900c --- /dev/null +++ b/base_user_role/i18n/en_GB.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: English (United Kingdom) (https://www.transifex.com/oca/" +"teams/23907/en_GB/)\n" +"Language: en_GB\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Created by" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Created on" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Name" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "User" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Views" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Last Modified on" diff --git a/base_user_role/i18n/es.po b/base_user_role/i18n/es.po new file mode 100644 index 00000000..58b8333b --- /dev/null +++ b/base_user_role/i18n/es.po @@ -0,0 +1,451 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Antonio Trueba , 2016 +# Pedro M. Baeza , 2016 +# Eduardo Rodríguez Crespo , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2024-02-14 20:36+0000\n" +"Last-Translator: Ivorra78 \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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "%s(copia)" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Controles de Acceso" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Grupos de acceso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menú Acceso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Permisos de acceso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Activo" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplicación" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Asignar a un usuario" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Categoría asociada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Grupo asociado" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Categoría del grupo asociado" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "Cancelar" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Cerrar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Índice Color" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Comentarios" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Crear" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Crear Función" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Crear rol a partir del usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Crear rol desde el asistente de usuario" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Activado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "De" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nombre grupo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grupo creado para establecer permisos de acceso para compartir datos con " +"algunos usuarios." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Agrupar a los grupos en un rol" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "Agrupar grupos en un rol y especificar un nombre para este rol" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Heredados" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Notas internas" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Relación inversa para el campo Hereda. Los grupos de los que este grupo " +"hereda" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Modelo Recuento de accesos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Grupos Padre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Padres" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Regla de registro" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Relación para los grupos que representan un rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Líneas del rol" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Roles en las que participa el grupo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Reglas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Recuento de reglas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Compartir Grupo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "A" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Hereda transitivamente" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Actualizar Roles de Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Roles de usuario" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Usuarios" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Usuarios asociados a un rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Lista Usuarios" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Los usuarios de este grupo automáticamente heredan esos grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "o" + +#~ msgid "# Roles" +#~ msgstr "# Roles" + +#~ msgid "Roles" +#~ msgstr "Roles" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "Los roles sólo pueden asignarse a un usuario una vez cada vez" + +#~ msgid "User role" +#~ msgstr "Rol de usuario" + +#~ msgid "Last Modified on" +#~ msgstr "Úlima modificación en" diff --git a/base_user_role/i18n/es_AR.po b/base_user_role/i18n/es_AR.po new file mode 100644 index 00000000..a02e744f --- /dev/null +++ b/base_user_role/i18n/es_AR.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Argentina) (https://www.transifex.com/oca/" +"teams/23907/es_AR/)\n" +"Language: es_AR\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización realizada por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/base_user_role/i18n/es_CL.po b/base_user_role/i18n/es_CL.po new file mode 100644 index 00000000..d8a112c9 --- /dev/null +++ b/base_user_role/i18n/es_CL.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/oca/teams/23907/" +"es_CL/)\n" +"Language: es_CL\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/base_user_role/i18n/es_CO.po b/base_user_role/i18n/es_CO.po new file mode 100644 index 00000000..2aacaf23 --- /dev/null +++ b/base_user_role/i18n/es_CO.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Colombia) (https://www.transifex.com/oca/teams/23907/" +"es_CO/)\n" +"Language: es_CO\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre Público" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Actualizado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Actualizado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" diff --git a/base_user_role/i18n/es_CR.po b/base_user_role/i18n/es_CR.po new file mode 100644 index 00000000..29817268 --- /dev/null +++ b/base_user_role/i18n/es_CR.po @@ -0,0 +1,429 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/oca/" +"teams/23907/es_CR/)\n" +"Language: es_CR\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ultima actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/es_DO.po b/base_user_role/i18n/es_DO.po new file mode 100644 index 00000000..97f6ecba --- /dev/null +++ b/base_user_role/i18n/es_DO.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Dominican Republic) (https://www.transifex.com/oca/" +"teams/23907/es_DO/)\n" +"Language: es_DO\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/base_user_role/i18n/es_EC.po b/base_user_role/i18n/es_EC.po new file mode 100644 index 00000000..20f23f36 --- /dev/null +++ b/base_user_role/i18n/es_EC.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Ecuador) (https://www.transifex.com/oca/teams/23907/" +"es_EC/)\n" +"Language: es_EC\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/base_user_role/i18n/es_ES.po b/base_user_role/i18n/es_ES.po new file mode 100644 index 00000000..5f1835d9 --- /dev/null +++ b/base_user_role/i18n/es_ES.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-01 10:38+0000\n" +"PO-Revision-Date: 2017-05-01 10:38+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/" +"es_ES/)\n" +"Language: es_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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre para mostrar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Usuarios" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Usuarios" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/base_user_role/i18n/es_MX.po b/base_user_role/i18n/es_MX.po new file mode 100644 index 00000000..daac5026 --- /dev/null +++ b/base_user_role/i18n/es_MX.po @@ -0,0 +1,447 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2020-02-15 15:13+0000\n" +"Last-Translator: Jesús Alan Ramos Rodríguez \n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/" +"es_MX/)\n" +"Language: es_MX\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 3.10\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Controles de Acceso" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menú de Acceso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplicación" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Categoría asociada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Grupo asociado" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Categoría del grupo asociado" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Indice de color" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Comentario" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre desplegado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Habilitado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Desde" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nombre del Grupo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grupo creado para establecer derechos de acceso para compartir datos con " +"algunos usuarios." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Hereda" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizacion por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima actualización realizada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Líneas de Rol" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Reglas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Compartir Grupo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Hasta" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Transitivamente hereda" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Actualizar roles de usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Roles del usuario" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Usuarios" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Usuarios asociados a un rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Lista de usuarios" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Los usuarios de este grupo heredan automáticamente esos grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Roles" + +#~ msgid "User role" +#~ msgstr "Rol del usuario" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modificacion realizada" + +#~ msgid "Company" +#~ msgstr "Empresa" + +#~ msgid "User \"{}\" does not have access to the company \"{}\"" +#~ msgstr "El usuario \"{}\" no tiene acceso a la empresa \"{}\"" diff --git a/base_user_role/i18n/es_PE.po b/base_user_role/i18n/es_PE.po new file mode 100644 index 00000000..9b47d8e0 --- /dev/null +++ b/base_user_role/i18n/es_PE.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Peru) (https://www.transifex.com/oca/teams/23907/" +"es_PE/)\n" +"Language: es_PE\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nombre a Mostrar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Actualizado última vez por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima Actualización" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima Modificación en" diff --git a/base_user_role/i18n/es_PY.po b/base_user_role/i18n/es_PY.po new file mode 100644 index 00000000..62d91295 --- /dev/null +++ b/base_user_role/i18n/es_PY.po @@ -0,0 +1,429 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Paraguay) (https://www.transifex.com/oca/teams/23907/" +"es_PY/)\n" +"Language: es_PY\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ultima actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/es_VE.po b/base_user_role/i18n/es_VE.po new file mode 100644 index 00000000..711b80d8 --- /dev/null +++ b/base_user_role/i18n/es_VE.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/" +"teams/23907/es_VE/)\n" +"Language: es_VE\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Mostrar nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última actualización realizada por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima actualizacion en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nombre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Modificada por última vez" diff --git a/base_user_role/i18n/et.po b/base_user_role/i18n/et.po new file mode 100644 index 00000000..dec09827 --- /dev/null +++ b/base_user_role/i18n/et.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Estonian (https://www.transifex.com/oca/teams/23907/et/)\n" +"Language: et\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Loonud" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Loodud" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Näidatav nimi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nimi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Kasutaja" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vaated" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Viimati muudetud" diff --git a/base_user_role/i18n/eu.po b/base_user_role/i18n/eu.po new file mode 100644 index 00000000..9e3975dd --- /dev/null +++ b/base_user_role/i18n/eu.po @@ -0,0 +1,428 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Basque (https://www.transifex.com/oca/teams/23907/eu/)\n" +"Language: eu\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Nork sortua" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Created on" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Izena erakutsi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Izena" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/fa.po b/base_user_role/i18n/fa.po new file mode 100644 index 00000000..fd79c73c --- /dev/null +++ b/base_user_role/i18n/fa.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Persian (https://www.transifex.com/oca/teams/23907/fa/)\n" +"Language: fa\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "ایجاد شده در" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "نام نمایشی" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "شناسه" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "آخرین به روز رسانی توسط" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "آخرین به روز رسانی در" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "نام" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "نماها" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "تاریخ آخرین به‌روزرسانی" diff --git a/base_user_role/i18n/fi.po b/base_user_role/i18n/fi.po new file mode 100644 index 00000000..284228dc --- /dev/null +++ b/base_user_role/i18n/fi.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Luotu" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nimi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nimi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Käyttäjä" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Käyttäjät" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Käyttäjät" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Viimeksi muokattu" diff --git a/base_user_role/i18n/fr.po b/base_user_role/i18n/fr.po new file mode 100644 index 00000000..3f9857ec --- /dev/null +++ b/base_user_role/i18n/fr.po @@ -0,0 +1,455 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:12+0000\n" +"PO-Revision-Date: 2025-12-03 10:42+0000\n" +"Last-Translator: Yann Papouin \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 5.10.4\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "Rôles utilisateur" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "%s (copie)" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "Toute modification effectuée ici ne sera pas persistante." + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" +"Les droits d'accès de cet utilisateur sont gérés par des rôles." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "Durée de validité maximale des clés API" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Contrôles d'accès" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Groupes d'accès" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Accès au menu" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Droits d'accès" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Actif" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "Ajouter plusieurs utilisateurs" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "Ajouter des utilisateurs" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Application" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Assigner à l'utilisateur" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Catégorie associée" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Groupe associé" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Catégorie du groupe associé" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "Annuler" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Fermer" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Indice de couleur" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Commentaire" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Créer" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Créer un rôle" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Créer un rôle à partir d'un utilisateur" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Assistant de création de rôle à partir d'un utilisateur" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" +"Détermine la durée maximale d'une clé API créée par un utilisateur " +"appartenant à ce groupe." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Activé" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "À partir du" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nom du groupe" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Groupe créé pour définir les droits d'accès pour le partage des données avec " +"les autres utilisateurs." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Regrouper les groupes en un rôle" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "Regrouper les groupes dans un rôle et spécifier un nom pour ce rôle" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Groupes" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Hérite" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Notes internes" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Relation inverse pour le champ Inherits. Les groupes dont ce groupe hérite" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Mis-à-jour par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Mis-à-jour le" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Nombre de droits d'accès" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nom" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Groupes parent" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Parents" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Règles sur les enregistrements" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Relation pour les groupes qui représentent un rôle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rôle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Lignes du rôle" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Rôles dans lesquels le groupe est impliqué" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Règles" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Nombre de règles" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Groupe de partage" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "Montrer l'alerte" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Jusqu'au" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Hérite transitivement" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Mise à jour des rôles utilisateur" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Utilisateur" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "Rôle utilisateur" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "Rôles utilisateur" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Rôles utilisateur" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" +"Les rôles ne peuvent être attribués à un utilisateur qu'une seule fois à la " +"fois" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utilisateurs" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Utilisateurs associés à un rôle" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Liste d'utilisateurs" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Les utilisateurs de ce groupe héritent automatiquement de ces groupes" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vues" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "Assistant pour ajouter plusieurs utilisateurs à un rôle" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "ou" + +#~ msgid "# Roles" +#~ msgstr "# Rôles" + +#~ msgid "Roles" +#~ msgstr "Rôles" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "" +#~ "Les rôles ne peuvent être attribués à un utilisateur qu'une seule fois à " +#~ "la fois" + +#~ msgid "User role" +#~ msgstr "Rôle utilisateur" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/base_user_role/i18n/fr_CA.po b/base_user_role/i18n/fr_CA.po new file mode 100644 index 00000000..ecb6e58a --- /dev/null +++ b/base_user_role/i18n/fr_CA.po @@ -0,0 +1,430 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Martin Malorni , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Martin Malorni , 2016\n" +"Language-Team: French (Canada) (https://www.transifex.com/oca/teams/23907/" +"fr_CA/)\n" +"Language: fr_CA\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Afficher le nom" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "Identifiant" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nom" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/fr_CH.po b/base_user_role/i18n/fr_CH.po new file mode 100644 index 00000000..20630a8d --- /dev/null +++ b/base_user_role/i18n/fr_CH.po @@ -0,0 +1,434 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# leemannd , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: leemannd , 2016\n" +"Language-Team: French (Switzerland) (https://www.transifex.com/oca/" +"teams/23907/fr_CH/)\n" +"Language: fr_CH\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Modifié par" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Modifié le" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utilisateurs" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Utilisateurs" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/base_user_role/i18n/fr_FR.po b/base_user_role/i18n/fr_FR.po new file mode 100644 index 00000000..08880270 --- /dev/null +++ b/base_user_role/i18n/fr_FR.po @@ -0,0 +1,430 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# Aurel , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-18 02:29+0000\n" +"PO-Revision-Date: 2017-02-18 02:29+0000\n" +"Last-Translator: Aurel , 2017\n" +"Language-Team: French (France) (https://www.transifex.com/oca/teams/23907/" +"fr_FR/)\n" +"Language: fr_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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utilsateurs" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Utilsateurs" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/gl.po b/base_user_role/i18n/gl.po new file mode 100644 index 00000000..504845e7 --- /dev/null +++ b/base_user_role/i18n/gl.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# César Castro Cruz , 2016 +# Alejandro Santana , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Alejandro Santana , 2016\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "ültima actualización por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nome" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuario" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación" diff --git a/base_user_role/i18n/gl_ES.po b/base_user_role/i18n/gl_ES.po new file mode 100644 index 00000000..64c4a3c4 --- /dev/null +++ b/base_user_role/i18n/gl_ES.po @@ -0,0 +1,429 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Galician (Spain) (https://www.transifex.com/oca/teams/23907/" +"gl_ES/)\n" +"Language: gl_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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/he.po b/base_user_role/i18n/he.po new file mode 100644 index 00000000..1c9c6824 --- /dev/null +++ b/base_user_role/i18n/he.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Hebrew (https://www.transifex.com/oca/teams/23907/he/)\n" +"Language: he\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "נוצר על ידי" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "השם המוצג" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "מזהה" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על ידי" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "עודכן לאחרונה על" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "שם" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "תצוגות" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "תאריך שינוי אחרון" diff --git a/base_user_role/i18n/hr.po b/base_user_role/i18n/hr.po new file mode 100644 index 00000000..6d29d712 --- /dev/null +++ b/base_user_role/i18n/hr.po @@ -0,0 +1,445 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:12+0000\n" +"PO-Revision-Date: 2017-06-22 01:12+0000\n" +"Last-Translator: Bole , 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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Kontrole pristupa" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Izbornik pristupa" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplikacija" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated category" +msgstr "Pridružena grupa" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Pridružena grupa" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated group's category" +msgstr "Pridružena grupa" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Index boje" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Komentar" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Prikaži ime" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Omogućen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Od" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Naziv grupe" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grupa kreirana za postavljanje pristupnih prava za dijeljenje podataka sa " +"nekim korisnicima" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupe" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Nasljeđuje" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zadnje ažuriranje" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rola" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Stavke role" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Pravila" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Dijeli grupu" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Do" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +#, fuzzy +msgid "Update user roles" +msgstr "Korisničke role" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Korisnik" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Korisničke role" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Korisnici" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Korisnici priduženi roli" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Korisničke role" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Korisnici ove grupe automatski nasljeđuju ove grupe" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Pregled" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Role" + +#~ msgid "User role" +#~ msgstr "Korisnička rola" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnja izmjena dana" diff --git a/base_user_role/i18n/hr_HR.po b/base_user_role/i18n/hr_HR.po new file mode 100644 index 00000000..a3857664 --- /dev/null +++ b/base_user_role/i18n/hr_HR.po @@ -0,0 +1,435 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Bole , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Bole , 2016\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/" +"hr_HR/)\n" +"Language: hr_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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Korisnici" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Korisnici" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnje modificirano" diff --git a/base_user_role/i18n/hu.po b/base_user_role/i18n/hu.po new file mode 100644 index 00000000..907aaa4e --- /dev/null +++ b/base_user_role/i18n/hu.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Hungarian (https://www.transifex.com/oca/teams/23907/hu/)\n" +"Language: hu\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Készítette" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Létrehozás dátuma" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Név megjelenítése" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Utoljára frissítve, által" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Utoljára frissítve " + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Név" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Felhasználó" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Nézetek" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Utolsó frissítés dátuma" diff --git a/base_user_role/i18n/id.po b/base_user_role/i18n/id.po new file mode 100644 index 00000000..7443d277 --- /dev/null +++ b/base_user_role/i18n/id.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Indonesian (https://www.transifex.com/oca/teams/23907/id/)\n" +"Language: id\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Diperbaharui oleh" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Diperbaharui pada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nama" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Dilihat" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Terakhir Dimodifikasi pada" diff --git a/base_user_role/i18n/it.po b/base_user_role/i18n/it.po new file mode 100644 index 00000000..39cd2288 --- /dev/null +++ b/base_user_role/i18n/it.po @@ -0,0 +1,457 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Paolo Valier , 2016 +# Giacomo , 2016 +# Nicola Malcontenti , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2025-11-21 10:28+0000\n" +"Last-Translator: mymage \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 5.10.4\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "N° ruoli utente" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "%s (copia)" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" +"Qualsiasi modifica configurazione effettuata qui non sarà persistente." + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" +"Le autorizzazioni di accesso di questo utente sono gestiti dai ruoli." +"" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "Giorni massimi durata chiavi API" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Controlli di accesso" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Gruppi di accesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menu d'accesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Diritti di accesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Attivo" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "Aggiungi utenti multipli" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "Aggiungi utenti" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Applicazione" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Assegna a utente" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Categoria associata" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Gruppo associato" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Categoria del gruppo associato" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "Annulla" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Chiudi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Indice colore" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Commento" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Crea" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Crea ruolo" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Crea ruolo dall'utente" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Procedura guidata creazione ruolo dall'utente" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" +"Determina la durata massima di una chiave API creata da un utente " +"appartenente a questo gruppo." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Attiva" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Da" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nome gruppo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Gruppo creato per impostare i diritti di accesso per la condivisione dei " +"dati con alcuni utenti." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Raggruppa gruppi in un ruolo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "Raggruppa gruppi in un ruolo e indica un nume per il ruolo" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Gruppi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Eredita" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Note interne" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Relazione inversa per il campo ereditato. I gruppi che ereditano da questo " +"gruppo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Conteggio accesso modello" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nome" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Gruppi padre" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Padri" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Regole record" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Relazione per i gruppi che rappresentano un ruolo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Ruolo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Righe del ruolo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Ruoli nei quali il gruppo è coinvolo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regole" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Numero regole" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Gruppo condivisione" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "Visualizza avviso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "A" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Eredita transitivamente" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Aggiorna i ruoli dell'utente" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Utente" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "Ruolo utente" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "Ruoli utente" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Ruoli utente" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "I ruoli utente possono essere assegnati all'utente solo uno alla volta" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utenti" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Utenti associati al ruolo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Elenco utenti" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Gli utenti di questo gruppo ereditano automaticamente quei gruppi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Viste" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "Procedura guidata per aggiungere utenti multipli ad un ruolo" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "o" + +#~ msgid "# Roles" +#~ msgstr "N° ruoli" + +#~ msgid "Roles" +#~ msgstr "Ruoli" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "I ruoli possono essere assegnati all'utente solo uno alla volta" + +#~ msgid "User role" +#~ msgstr "Ruolo utente" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/base_user_role/i18n/ja.po b/base_user_role/i18n/ja.po new file mode 100644 index 00000000..0f1dd4ba --- /dev/null +++ b/base_user_role/i18n/ja.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Japanese (https://www.transifex.com/oca/teams/23907/ja/)\n" +"Language: ja\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "作成日" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "名称" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "ユーザ" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "ビュー" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "最終更新日" diff --git a/base_user_role/i18n/ko.po b/base_user_role/i18n/ko.po new file mode 100644 index 00000000..f739c7c1 --- /dev/null +++ b/base_user_role/i18n/ko.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Korean (https://www.transifex.com/oca/teams/23907/ko/)\n" +"Language: ko\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "작성자" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "작성일" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "표시 이름" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "최근 갱신 날짜" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "이름" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "회" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "최근 수정" diff --git a/base_user_role/i18n/lt.po b/base_user_role/i18n/lt.po new file mode 100644 index 00000000..529ce2b8 --- /dev/null +++ b/base_user_role/i18n/lt.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"Language: lt\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%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Vaizduojamas pavadinimas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Pavadinimas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Naudotojas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Rodiniai" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Paskutinį kartą keista" diff --git a/base_user_role/i18n/lt_LT.po b/base_user_role/i18n/lt_LT.po new file mode 100644 index 00000000..8dbdf0e2 --- /dev/null +++ b/base_user_role/i18n/lt_LT.po @@ -0,0 +1,430 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# Arminas Grigonis , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Arminas Grigonis , 2016\n" +"Language-Team: Lithuanian (Lithuania) (https://www.transifex.com/oca/" +"teams/23907/lt_LT/)\n" +"Language: lt_LT\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%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/lv.po b/base_user_role/i18n/lv.po new file mode 100644 index 00000000..bfe0f8bf --- /dev/null +++ b/base_user_role/i18n/lv.po @@ -0,0 +1,429 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Latvian (https://www.transifex.com/oca/teams/23907/lv/)\n" +"Language: lv\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 != 0 ? 1 : " +"2);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Pēdējo reizi atjaunoja" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Pēdējās izmaiņas" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nosaukums" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Lietotājs" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Skatījumi" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/mk.po b/base_user_role/i18n/mk.po new file mode 100644 index 00000000..8e032f01 --- /dev/null +++ b/base_user_role/i18n/mk.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Macedonian (https://www.transifex.com/oca/teams/23907/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Креирано од" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Креирано на" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Прикажи име" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Последно ажурирање од" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Последно ажурирање на" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Име" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Корисник" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Погледи" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Последна промена на" diff --git a/base_user_role/i18n/mn.po b/base_user_role/i18n/mn.po new file mode 100644 index 00000000..af91992c --- /dev/null +++ b/base_user_role/i18n/mn.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Mongolian (https://www.transifex.com/oca/teams/23907/mn/)\n" +"Language: mn\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Үүсгэгч" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Үүсгэсэн" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Дэлгэцийн Нэр" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Сүүлийн засвар хийсэн" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Сүүлийн засвар хийсэн огноо" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Нэр" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Хэрэглэгч" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Дэлгэцүүд" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Сүүлийн засвар хийсэн огноо" diff --git a/base_user_role/i18n/nb.po b/base_user_role/i18n/nb.po new file mode 100644 index 00000000..c062b821 --- /dev/null +++ b/base_user_role/i18n/nb.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Norwegian Bokmål (https://www.transifex.com/oca/teams/23907/" +"nb/)\n" +"Language: nb\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Visnings navn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Navn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Bruker" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Visninger" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Sist oppdatert " diff --git a/base_user_role/i18n/nb_NO.po b/base_user_role/i18n/nb_NO.po new file mode 100644 index 00000000..d169c349 --- /dev/null +++ b/base_user_role/i18n/nb_NO.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# Imre Kristoffer Eilertsen , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Imre Kristoffer Eilertsen , 2016\n" +"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/oca/" +"teams/23907/nb_NO/)\n" +"Language: nb_NO\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Laget av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Laget den" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert den" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Sist endret den" diff --git a/base_user_role/i18n/nl.po b/base_user_role/i18n/nl.po new file mode 100644 index 00000000..13a8565d --- /dev/null +++ b/base_user_role/i18n/nl.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Erwin van der Ploeg , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Erwin van der Ploeg , 2016\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"Language: 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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Opmerking" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Te tonen naam" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Ingeschakeld" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Groepen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naam" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Gebruiker" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Gebruikers" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Gebruikers" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst bijgewerkt op" diff --git a/base_user_role/i18n/nl_BE.po b/base_user_role/i18n/nl_BE.po new file mode 100644 index 00000000..28174fcd --- /dev/null +++ b/base_user_role/i18n/nl_BE.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Dutch (Belgium) (https://www.transifex.com/oca/teams/23907/" +"nl_BE/)\n" +"Language: nl_BE\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Gemaakt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Gemaakt op" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naam:" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Gebruiker" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst Aangepast op" diff --git a/base_user_role/i18n/nl_NL.po b/base_user_role/i18n/nl_NL.po new file mode 100644 index 00000000..2b61568f --- /dev/null +++ b/base_user_role/i18n/nl_NL.po @@ -0,0 +1,436 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-30 12:21+0000\n" +"PO-Revision-Date: 2017-06-30 12:21+0000\n" +"Last-Translator: Peter Hageman , 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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Applicatie" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Kleurindex" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Commentaar" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "weergavenaam" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Van" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Groepsnaam" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Groepen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naam" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Rolregels" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regels" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Deel Groep" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Aan" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Gebruiker" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Gebruikers" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Gebruikers" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Rollen" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst gewijzigd op" diff --git a/base_user_role/i18n/pl.po b/base_user_role/i18n/pl.po new file mode 100644 index 00000000..86123cb0 --- /dev/null +++ b/base_user_role/i18n/pl.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Polish (https://www.transifex.com/oca/teams/23907/pl/)\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Utworzone przez" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Utworzono" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Wyświetlana nazwa " + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ostatnio modyfikowane przez" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ostatnia zmiana" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nazwa" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Użytkownik" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Widoki" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Ostatnio modyfikowano" diff --git a/base_user_role/i18n/pt.po b/base_user_role/i18n/pt.po new file mode 100644 index 00000000..e989c18d --- /dev/null +++ b/base_user_role/i18n/pt.po @@ -0,0 +1,449 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +# Pedro Castro Silva , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:44+0000\n" +"PO-Revision-Date: 2023-08-31 10:35+0000\n" +"Last-Translator: Pedro Castro Silva \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.17\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Controlos de Acesso" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Grupos de Acesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Menu de Acesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Permissões de Acesso" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Ativo" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplicação" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Atribuir a utilizador" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Categoria associada" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Grupo associado" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Categoria do grupo associado" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Fechar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Índice de Cor" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Comentário" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Criar" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Criar uma função a partir do utilizador" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Criar função a partir do assistente de utilizador" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nome a Apresentar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Habilitado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "De" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Nome do Grupo" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grupo criado para estabelecer direitos de acesso na partilha de dados com " +"outros utilizadores." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Heranças" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Notas Internas" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Relação inversa para o campo Heranças. Os grupos dos quais este grupo está a " +"herdar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Atualizado pela última vez por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Atualizado pela última vez em" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Contagem de Acessos ao Modelo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nome" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Grupos Ascendentes" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Ascendentes" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Regras de Registos" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Relação para os grupos que representa uma função" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Função" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Linhas de funções" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Funções nas quais o grupo está envolvido" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regras" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Contagem de Regras" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Partilhar Grupo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Até" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Herda transitoriamente" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Atualizar funções de utilizador" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Utilizador" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Funções de utilizador" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utilizadores" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Utilizadores associados a uma função" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Lista de utilizadores" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Utilizadores deste grupo automaticamente herdam esses grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vistas" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "ou" + +#~ msgid "# Roles" +#~ msgstr "# Funções" + +#~ msgid "Roles" +#~ msgstr "Funções" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "As funções podem ser atribuídas a um utilizadores apenas uma vez" + +#~ msgid "User role" +#~ msgstr "Função de utilizador" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificação Em" diff --git a/base_user_role/i18n/pt_BR.po b/base_user_role/i18n/pt_BR.po new file mode 100644 index 00000000..2237ee4a --- /dev/null +++ b/base_user_role/i18n/pt_BR.po @@ -0,0 +1,434 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +# falexandresilva , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:12+0000\n" +"PO-Revision-Date: 2017-06-22 01:12+0000\n" +"Last-Translator: falexandresilva , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nome para Mostrar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Habilitado" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "A partir de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupos" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nome" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regras" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Para" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Usuário" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Usuários" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Usuários" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Visualizações" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Última atualização em" diff --git a/base_user_role/i18n/pt_PT.po b/base_user_role/i18n/pt_PT.po new file mode 100644 index 00000000..599e6805 --- /dev/null +++ b/base_user_role/i18n/pt_PT.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Pedro Castro Silva , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Pedro Castro Silva , 2016\n" +"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/" +"teams/23907/pt_PT/)\n" +"Language: pt_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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nome a exibir" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Atualizado pela última vez por" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Atualizado pela última vez em" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nome" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Utilizador" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Modificado a última vez por" diff --git a/base_user_role/i18n/ro.po b/base_user_role/i18n/ro.po new file mode 100644 index 00000000..44c10715 --- /dev/null +++ b/base_user_role/i18n/ro.po @@ -0,0 +1,434 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +# Daniel Schweiger , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:12+0000\n" +"PO-Revision-Date: 2017-06-22 01:12+0000\n" +"Last-Translator: Daniel Schweiger , 2017\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Creat la" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Nume Afişat" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Ultima actualizare la" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Nume" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Reguli" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Utilizator" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Utilizatori" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Utilizatori" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima actualizare în" diff --git a/base_user_role/i18n/ru.po b/base_user_role/i18n/ru.po new file mode 100644 index 00000000..b3a532ba --- /dev/null +++ b/base_user_role/i18n/ru.po @@ -0,0 +1,430 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Russian (https://www.transifex.com/oca/teams/23907/ru/)\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " +"(n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Создан" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Последний раз обновлено" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Последний раз обновлено" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Название" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Пользователь" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/sk.po b/base_user_role/i18n/sk.po new file mode 100644 index 00000000..df028737 --- /dev/null +++ b/base_user_role/i18n/sk.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Zobraziť meno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Naposledy upravil" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Naposledy upravené" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Meno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Pohľady" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Posledná modifikácia" diff --git a/base_user_role/i18n/sl.po b/base_user_role/i18n/sl.po new file mode 100644 index 00000000..f76d272a --- /dev/null +++ b/base_user_role/i18n/sl.po @@ -0,0 +1,442 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:12+0000\n" +"PO-Revision-Date: 2017-06-22 01:12+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3);\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Nadzor dostopa" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Meni dostopa" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Aplikacija" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated category" +msgstr "Povezana skupina" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Povezana skupina" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +#, fuzzy +msgid "Associated group's category" +msgstr "Povezana skupina" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Barvni indeks" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Komentar" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Prikazni naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Omogočeno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Od" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Naziv skupine" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Skupine" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Podeduje" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Naziv" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Vloga" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Postavke vlog" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Pravila" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Za" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Prehodno podeduje" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +#, fuzzy +msgid "Update user roles" +msgstr "Uporabniška vloga" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Uporabnik" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Uporabniki" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Uporabniki povezani z vlogo" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Uporabniki" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Uporabniki v tej skupini samodejno podedujejo te skupine" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Prikazi" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles" +#~ msgstr "Vloge" + +#~ msgid "User role" +#~ msgstr "Uporabniška vloga" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnjič spremenjeno" diff --git a/base_user_role/i18n/sr.po b/base_user_role/i18n/sr.po new file mode 100644 index 00000000..f72d05e5 --- /dev/null +++ b/base_user_role/i18n/sr.po @@ -0,0 +1,429 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Serbian (https://www.transifex.com/oca/teams/23907/sr/)\n" +"Language: sr\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Kreiran" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Ime" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Pregledi" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" diff --git a/base_user_role/i18n/sr@latin.po b/base_user_role/i18n/sr@latin.po new file mode 100644 index 00000000..92c9d9b1 --- /dev/null +++ b/base_user_role/i18n/sr@latin.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Serbian (Latin) (https://www.transifex.com/oca/teams/23907/" +"sr@latin/)\n" +"Language: sr@latin\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Kreiran" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Ime za prikaz" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Zadnja izmjena" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Zadnja izmjena" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Ime:" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Korisnik" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Pregledi" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnja izmjena" diff --git a/base_user_role/i18n/sv.po b/base_user_role/i18n/sv.po new file mode 100644 index 00000000..f018042b --- /dev/null +++ b/base_user_role/i18n/sv.po @@ -0,0 +1,453 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2025-11-17 10:46+0000\n" +"Last-Translator: jakobkrabbe \n" +"Language-Team: Swedish (https://www.transifex.com/oca/teams/23907/sv/)\n" +"Language: sv\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 5.10.4\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "# Användarroller" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "%s (kopia)" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" +"Eventuella konfigurationsändringar som görs här kommer inte att vara " +"beständiga." + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" +"Denna användares åtkomsträttigheter hanteras av roller." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "API-nycklars maximala varaktighet dagar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Åtkomstkontroll" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Åtkomstgrupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Åtkomstmeny" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Tillträdesrättigheter" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Aktiv" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Tillämpning" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Tilldela till användare" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Associerad kategori" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Associerad grupp" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Associerad grupps kategori" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "Avbryt" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Nära" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Färgindex" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Hur gör man" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Skapa" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Skapa roll" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Skapa roll från användare" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Skapa roll från användarguiden" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" +"Bestämmer den maximala varaktigheten för en API-nyckel som skapats av en " +"användare som tillhör den här gruppen." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Visa namn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Aktiverad" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Från" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Gruppens namn" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Grupp skapad för att ange åtkomsträttigheter för att dela data med vissa " +"användare." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Gruppera grupper i en roll" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "Gruppera grupper i en roll och ange ett namn för denna roll" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Grupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Arv" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Interna anmärkningar" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" +"Omvänd relation för fältet Inherits (ärver). De grupper som denna grupp " +"ärver från" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Modell Åtkomst Antal" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Namn" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Föräldragrupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Föräldrar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Regler för inspelning" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Relation för de grupper som representerar en roll" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Roll" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Rollfördelning" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Roller som gruppen är involverad i" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Regler" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Antal regler" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Aktiegrupp" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "Visa avisering" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Till" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Övergångsvis ärver" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Uppdatera användarroller" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Användare" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "Användarroll" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "Användarroller" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Användarroller" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "Användarroller kan endast tilldelas en användare en gång i taget" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Användare" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Användare som är kopplade till en roll" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Lista över användare" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Användare av denna grupp ärver automatiskt dessa grupper" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Vyer" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "eller" + +#~ msgid "# Roles" +#~ msgstr "# Roller" + +#~ msgid "Roles" +#~ msgstr "Roller" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "Roller kan tilldelas en användare endast en gång åt gången" + +#~ msgid "User role" +#~ msgstr "Användarroll" + +#~ msgid "Last Modified on" +#~ msgstr "Senast redigerad" diff --git a/base_user_role/i18n/th.po b/base_user_role/i18n/th.po new file mode 100644 index 00000000..65a6d7fd --- /dev/null +++ b/base_user_role/i18n/th.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Thai (https://www.transifex.com/oca/teams/23907/th/)\n" +"Language: th\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "ชื่อที่ใช้แสดง" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "รหัส" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "อัพเดทครั้งสุดท้ายโดย" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "อัพเดทครั้งสุดท้ายเมื่อ" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "ชื่อ" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "ผู้ใช้" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "มุมมอง" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "แก้ไขครั้งสุดท้ายเมื่อ" diff --git a/base_user_role/i18n/tr.po b/base_user_role/i18n/tr.po new file mode 100644 index 00000000..643c5b62 --- /dev/null +++ b/base_user_role/i18n/tr.po @@ -0,0 +1,451 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# Ahmet Altinisik , 2016 +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-29 03:39+0000\n" +"PO-Revision-Date: 2025-08-14 17:25+0000\n" +"Last-Translator: Betül Öğmen \n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\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 5.10.4\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "# Kullanıcı Rolleri" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "Burada yapılan değişiklik kalıcı olmayacaktır." + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" +"Bu kullanıcının erişim hakları roller tarafından yönetilir." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "API Anahtarları maksimum gün süresi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Erişim Kontrolleri" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "Erişim Grupları" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "Erişim Menüsü" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "Erişim Hakları" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "Aktif" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Uygulama" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "Kullanıcıya ata" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "İlişkili kategori" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "İlişkili grup" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "İlişkili grup kategorisi" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "İptal" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "Kapat" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Renk İndeksi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "Yorum" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "Oluştur" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "Rol Oluştur" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "Kullanıcıdan bir rol oluşturma" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "Kullanıcıdan bir rol oluşturma sihirbazı" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Oluşturuldu" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" +"Bu gruba ait bir kullanıcı tarafından oluşturulan bir API anahtarının " +"maksimum süresini belirler." + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Görünen İsim" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Etkinleştirilmiş" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Başlangıç" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Grup Adı" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Bazı kullanıcılarla veri paylaşımı için erişim haklarını ayarlamak üzere " +"oluşturulan grup." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "Grupları bir role göre gruplandırın" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "Grupları bir rolde gruplama ve bu rol için bir ad belirleme" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Gruplar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Devralır" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Dahili Notlar" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "Devralma alanı için ters ilişki. Bu grubun devraldığı gruplar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Son güncelleyen" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Son güncelleme" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "Model Erişim Sayısı" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Adı" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "Üst Gruplar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "Üstler" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "Kayıt Kuralları" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "Bir rolü temsil eden gruplar için ilişki" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Rol" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "Rol satırları" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "Grubun dahil olduğu roller" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Kurallar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "Kuralların Sayısı" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Grubu Paylaş" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "Uyarı Göster" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Karşı" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "Geçişli olarak miras alır" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Kullanıcı rollerini güncelleme" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Kullanıcı" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "Kullanıcı Rolü" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "Kullanıcı Rolleri" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Kullanıcı rolleri" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" +"Kullanıcı rolleri bir kullanıcıya aynı anda yalnızca bir kez atanabilir" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Kullanıcılar" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Bir rolle ilişkili kullanıcılar" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Kullanıcılar listesi" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Bu grubun kullanıcıları, bu grupları otomatik olarak devralır" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Görünümler" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "veya" + +#~ msgid "# Roles" +#~ msgstr "# Roller" + +#~ msgid "Roles" +#~ msgstr "Roller" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "Roller bir kullanıcıya aynı anda yalnızca bir kez atanabilir" + +#~ msgid "User role" +#~ msgstr "Kullanıcı rolü" + +#~ msgid "Last Modified on" +#~ msgstr "Son değişiklik" diff --git a/base_user_role/i18n/tr_TR.po b/base_user_role/i18n/tr_TR.po new file mode 100644 index 00000000..81562c91 --- /dev/null +++ b/base_user_role/i18n/tr_TR.po @@ -0,0 +1,433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-22 00:55+0000\n" +"PO-Revision-Date: 2017-02-22 00:55+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/" +"tr_TR/)\n" +"Language: tr_TR\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Oluşturulma tarihi" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Görünen ad" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "Kimlik" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "En son güncelleyen " + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "En son güncelleme tarihi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Ad" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Kullanıcı" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Kullanıcılar" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "Kullanıcılar" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "En son güncelleme tarihi" diff --git a/base_user_role/i18n/uk.po b/base_user_role/i18n/uk.po new file mode 100644 index 00000000..79eee26f --- /dev/null +++ b/base_user_role/i18n/uk.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Ukrainian (https://www.transifex.com/oca/teams/23907/uk/)\n" +"Language: uk\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_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Створив" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Дата створення" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Name" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Переглядів" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Остання модифікація" diff --git a/base_user_role/i18n/vi.po b/base_user_role/i18n/vi.po new file mode 100644 index 00000000..fd559fb6 --- /dev/null +++ b/base_user_role/i18n/vi.po @@ -0,0 +1,431 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Vietnamese (https://www.transifex.com/oca/teams/23907/vi/)\n" +"Language: vi\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Tên" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Người sử dụng" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "Views" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Sửa lần cuối vào" diff --git a/base_user_role/i18n/vi_VN.po b/base_user_role/i18n/vi_VN.po new file mode 100644 index 00000000..dd8ec98f --- /dev/null +++ b/base_user_role/i18n/vi_VN.po @@ -0,0 +1,441 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2021-09-25 14:34+0000\n" +"Last-Translator: Mi Di \n" +"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/" +"teams/23907/vi_VN/)\n" +"Language: vi_VN\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.3.2\n" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "Kiểm soát quyền truy cập" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "Ứng dụng" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "Danh mục được liên kết" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "Nhóm được liên kết" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "Phân loại của nhóm được liên kết" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "Danh mục màu" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "Tạo bởi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "Tạo vào" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "Được kích hoạt" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "Từ" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "Tên nhóm" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" +"Nhóm này được tạo để thiết đặt quyền truy cập cho việc chia sẻ dữ liệu với " +"một số người dùng." + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "Các nhóm" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "Kế thừa từ" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "Ghi chú nội bộ" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "Tên" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "Vai trò" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "Tập luật" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "Nhóm chia sẻ" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "Tới" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "Cập nhật vai trò người dùng" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "Người dùng" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "Danh sách vai trò người dùng" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "Danh sách người dùng" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "Người dùng được gán vào role" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "Danh sách người dùng" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "Người dùng của nhóm này sẽ tự động kế thừa từ các nhóm khác" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Roles can be assigned to a user only once at a time" +#~ msgstr "Vai trò chỉ được gán cho người dùng một lần tại một thời điểm" + +#~ msgid "User role" +#~ msgstr "Vai trò người dùng" + +#~ msgid "Last Modified on" +#~ msgstr "Chỉnh sửa lần cuối vào" diff --git a/base_user_role/i18n/zh_CN.po b/base_user_role/i18n/zh_CN.po new file mode 100644 index 00000000..8b276ff7 --- /dev/null +++ b/base_user_role/i18n/zh_CN.po @@ -0,0 +1,434 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +# Jeffery Chen Fan , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: Jeffery Chen Fan , 2016\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" +"zh_CN/)\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "创建者" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "创建时间" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "ID" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "最后更新者" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "名称" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "用户" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "用户" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +#, fuzzy +msgid "Users list" +msgstr "用户" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "视图" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "Last Modified on" diff --git a/base_user_role/i18n/zh_TW.po b/base_user_role/i18n/zh_TW.po new file mode 100644 index 00000000..fecde659 --- /dev/null +++ b/base_user_role/i18n/zh_TW.po @@ -0,0 +1,432 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_user_role +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-17 02:07+0000\n" +"PO-Revision-Date: 2016-12-17 02:07+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Chinese (Taiwan) (https://www.transifex.com/oca/teams/23907/" +"zh_TW/)\n" +"Language: zh_TW\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" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_count +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_count +msgid "# User Roles" +msgstr "" + +#. module: base_user_role +#. odoo-python +#: code:addons/base_user_role/models/role.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "Any configuration changes made here will not be persistent." +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "The access rights of this user are managed by roles." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__api_key_duration +msgid "API Keys maximum duration days" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access +msgid "Access Controls" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__menu_access +msgid "Access Menu" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Access Rights" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__active +msgid "Active" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_add_multiple_users_wizard +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Add Multiple Users" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Add Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__category_id +msgid "Application" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__assign_to_user +msgid "Assign to user" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_category_id +msgid "Associated category" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__group_id +msgid "Associated group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__group_category_id +msgid "Associated group's category" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_add_users_wizard +msgid "Cancel" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Close" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__color +msgid "Color Index" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__comment +msgid "Comment" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +#: model_terms:ir.ui.view,arch_db:base_user_role.group_groups_into_role_wiz_view +msgid "Create" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_wizard_groups_into_role +msgid "Create Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.create_from_user_wizard_action +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "Create role from user" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_create_role_from_user +msgid "Create role from user wizard" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_uid +msgid "Created by" +msgstr "建立者" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__create_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__create_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__create_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__create_date +msgid "Created on" +msgstr "建立於" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__api_key_duration +msgid "" +"Determines the maximum duration of an api key created by a user belonging to " +"this group." +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__display_name +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__display_name +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__display_name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__is_enabled +msgid "Enabled" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_from +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_from +msgid "From" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__full_name +msgid "Group Name" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__share +msgid "Group created to set access rights for sharing data with some users." +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_wizard_groups_into_role +msgid "Group groups into a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_wizard_groups_into_role__name +msgid "Group groups into a role and specify a name for this role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__id +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__id +msgid "ID" +msgstr "編號" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__implied_ids +msgid "Inherits" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Internal Notes" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__parent_ids +msgid "" +"Inverse relation for the Inherits field. The groups from which this group is " +"inheriting" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_uid +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_uid +msgid "Last Updated by" +msgstr "最後更新:" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__write_date +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__write_date +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__write_date +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__model_access_count +msgid "Model Access Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_create_role_from_user__name +#: model:ir.model.fields,field_description:base_user_role.field_wizard_groups_into_role__name +msgid "Name" +msgstr "名稱" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__trans_parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_parent_ids +msgid "Parent Groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__parent_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__parent_ids +msgid "Parents" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Record Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_id +msgid "Relation for the groups that represents a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_id +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__role_id +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__role_id +msgid "Role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_line_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__line_ids +msgid "Role lines" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,help:base_user_role.field_res_users_role__role_ids +msgid "Roles in which the group is involved" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rule_groups +msgid "Rules" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__rules_count +msgid "Rules Count" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__share +msgid "Share Group" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users__show_alert +msgid "Show Alert" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__date_to +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__date_to +msgid "To" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__trans_implied_ids +msgid "Transitively inherits" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.server,name:base_user_role.cron_update_users_ir_actions_server +msgid "Update user roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role_line__user_id +msgid "User" +msgstr "使用者" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role +msgid "User Role" +msgstr "" + +#. module: base_user_role +#: model:ir.actions.act_window,name:base_user_role.action_res_users_role_tree +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users__role_ids +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__role_ids +#: model:ir.ui.menu,name:base_user_role.menu_action_res_users_role_tree +#: model_terms:ir.ui.view,arch_db:base_user_role.res_groups_view_form +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_form_inherit +msgid "User Roles" +msgstr "" + +#. module: base_user_role +#: model:ir.module.category,name:base_user_role.ir_module_category_role +msgid "User roles" +msgstr "" + +#. module: base_user_role +#: model:ir.model.constraint,message:base_user_role.constraint_res_users_role_line_user_role_uniq +msgid "User roles can be assigned to a user only once at a time" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__users +#: model:ir.model.fields,field_description:base_user_role.field_role_add_users_wizard__user_ids +#: model_terms:ir.ui.view,arch_db:base_user_role.view_res_users_role_form +msgid "Users" +msgstr "" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_res_users_role_line +msgid "Users associated to a role" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__user_ids +msgid "Users list" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,help:base_user_role.field_res_users_role__implied_ids +msgid "Users of this group automatically inherit those groups" +msgstr "" + +#. module: base_user_role +#: model:ir.model.fields,field_description:base_user_role.field_res_groups__view_access +#: model:ir.model.fields,field_description:base_user_role.field_res_users_role__view_access +msgid "Views" +msgstr "檢視" + +#. module: base_user_role +#: model:ir.model,name:base_user_role.model_role_add_users_wizard +msgid "Wizard to add multiple users to a role" +msgstr "" + +#. module: base_user_role +#: model_terms:ir.ui.view,arch_db:base_user_role.create_from_user_wizard_view +msgid "or" +msgstr "" + +#~ msgid "Last Modified on" +#~ msgstr "最後修改:" diff --git a/base_user_role/models/__init__.py b/base_user_role/models/__init__.py new file mode 100644 index 00000000..44140bcd --- /dev/null +++ b/base_user_role/models/__init__.py @@ -0,0 +1,3 @@ +from . import role +from . import user +from . import res_groups diff --git a/base_user_role/models/res_groups.py b/base_user_role/models/res_groups.py new file mode 100644 index 00000000..552af94b --- /dev/null +++ b/base_user_role/models/res_groups.py @@ -0,0 +1,87 @@ +from odoo import api, fields, models + + +class ResGroups(models.Model): + _inherit = "res.groups" + + view_access = fields.Many2many( + groups="base.group_system", + ) + + # The inverse field of the field group_id on the res.users.role model + # This field should be used a One2one relation as a role can only be + # represented by one group. It's declared as a One2many field as the + # inverse field on the res.users.role it's declared as a Many2one + role_id = fields.One2many( + comodel_name="res.users.role", + inverse_name="group_id", + help="Relation for the groups that represents a role", + ) + + role_ids = fields.Many2many( + comodel_name="res.users.role", + relation="res_groups_implied_roles_rel", + string="User Roles", + compute="_compute_role_ids", + help="Roles in which the group is involved", + ) + + parent_ids = fields.Many2many( + "res.groups", + "res_groups_implied_rel", + "hid", + "gid", + string="Parents", + help="Inverse relation for the Inherits field. " + "The groups from which this group is inheriting", + ) + + trans_parent_ids = fields.Many2many( + comodel_name="res.groups", + string="Parent Groups", + compute="_compute_trans_parent_ids", + recursive=True, + ) + + role_count = fields.Integer("# User Roles", compute="_compute_role_count") + + def _compute_role_count(self): + for group in self: + group.role_count = len(group.role_ids) + + @api.depends("parent_ids.trans_parent_ids") + def _compute_trans_parent_ids(self): + for group in self: + group.trans_parent_ids = ( + group.parent_ids | group.parent_ids.trans_parent_ids + ) + + def _compute_role_ids(self): + for group in self: + if group.trans_parent_ids: + group.role_ids = group.trans_parent_ids.role_id + else: + group.role_ids = group.role_id + + def action_view_roles(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "base_user_role.action_res_users_role_tree" + ) + action["context"] = {} + if len(self.role_ids) > 1: + action["domain"] = [("id", "in", self.role_ids.ids)] + elif self.role_ids: + form_view = [ + (self.env.ref("base_user_role.view_res_users_role_form").id, "form") + ] + if "views" in action: + action["views"] = form_view + [ + (state, view) for state, view in action["views"] if view != "form" + ] + else: + action["views"] = form_view + action["res_id"] = self.role_ids.id + else: + action = {"type": "ir.actions.act_window_close"} + return action diff --git a/base_user_role/models/role.py b/base_user_role/models/role.py new file mode 100644 index 00000000..ac03f657 --- /dev/null +++ b/base_user_role/models/role.py @@ -0,0 +1,170 @@ +# Copyright 2014 ABF OSIELL +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +import datetime +import logging + +from odoo import SUPERUSER_ID, _, api, fields, models + +_logger = logging.getLogger(__name__) + + +class ResUsersRole(models.Model): + _name = "res.users.role" + _inherits = {"res.groups": "group_id"} + _description = "User Role" + + group_id = fields.Many2one( + comodel_name="res.groups", + required=True, + ondelete="cascade", + readonly=True, + string="Associated group", + ) + line_ids = fields.One2many( + comodel_name="res.users.role.line", inverse_name="role_id", string="Role lines" + ) + user_ids = fields.One2many( + comodel_name="res.users", string="Users list", compute="_compute_user_ids" + ) + rule_ids = fields.Many2many( + comodel_name="ir.rule", + compute="_compute_rule_ids", + string="Record Rules", + required=False, + ) + rules_count = fields.Integer(compute="_compute_rule_ids") + model_access_ids = fields.Many2many( + comodel_name="ir.model.access", + compute="_compute_model_access_ids", + string="Access Rights", + required=False, + ) + model_access_count = fields.Integer(compute="_compute_model_access_ids") + + @api.depends("line_ids.user_id") + def _compute_user_ids(self): + for role in self.sudo() if self._bypass_rules() else self: + role.user_ids = role.line_ids.mapped("user_id") + + @api.depends("implied_ids", "implied_ids.model_access") + def _compute_model_access_ids(self): + for rec in self: + rec.model_access_ids = rec.implied_ids.model_access.ids + rec.model_access_count = len(rec.model_access_ids) + + @api.depends("implied_ids", "implied_ids.rule_groups") + def _compute_rule_ids(self): + for rec in self: + rec.rule_ids = rec.implied_ids.rule_groups.ids + rec.rules_count = len(rec.rule_ids) + + @api.model + def _bypass_rules(self): + # Run methods as super user to avoid problems by "Administrator/Access Right" + return self._name == "res.users.role" and self.env.user.has_group( + "base.group_erp_manager" + ) + + @api.model_create_multi + def create(self, vals_list): + model = (self.sudo() if self._bypass_rules() else self).browse() + new_records = super(ResUsersRole, model).create(vals_list) + new_records.update_users() + return new_records + + def read(self, fields=None, load="_classic_read"): + recs = self.sudo() if self._bypass_rules() else self + return super(ResUsersRole, recs).read(fields, load) + + def write(self, vals): + recs = self.sudo() if self._bypass_rules() else self + # Workaround to solve issue with broken code in odoo that clear the + # cache during the write: see odoo/addons/base/models/res_users.py#L226 + groups_vals = {} + for field in recs.group_id._fields: + if field in vals: + groups_vals[field] = vals.pop(field) + if groups_vals: + recs.group_id.write(groups_vals) + res = super(ResUsersRole, recs).write(vals) + recs.update_users() + return res + + def unlink(self): + users = self.mapped("user_ids") + res = super().unlink() + users.set_groups_from_roles(force=True) + return res + + def copy(self, default=None): + self.ensure_one() + default = dict(default or {}, name=_("%s (copy)", self.name)) + return super().copy(default) + + def update_users(self): + """Update all the users concerned by the roles identified by `ids`.""" + users = self.mapped("user_ids") + users.set_groups_from_roles() + return True + + @api.model + def cron_update_users(self): + logging.info("Update user roles") + self.search([]).update_users() + + def show_rule_ids(self): + action = self.env["ir.actions.actions"]._for_xml_id("base.action_rule") + action["domain"] = [("id", "in", self.rule_ids.ids)] + return action + + def show_model_access_ids(self): + action = self.env["ir.actions.actions"]._for_xml_id("base.ir_access_act") + action["domain"] = [("id", "in", self.model_access_ids.ids)] + return action + + +class ResUsersRoleLine(models.Model): + _name = "res.users.role.line" + _description = "Users associated to a role" + + active = fields.Boolean(related="user_id.active") + role_id = fields.Many2one( + comodel_name="res.users.role", required=True, string="Role", ondelete="cascade" + ) + user_id = fields.Many2one( + comodel_name="res.users", + required=True, + string="User", + domain=[("id", "!=", SUPERUSER_ID)], + ondelete="cascade", + ) + date_from = fields.Date("From") + date_to = fields.Date("To") + is_enabled = fields.Boolean("Enabled", compute="_compute_is_enabled") + _sql_constraints = [ + ( + "user_role_uniq", + "unique (user_id,role_id)", + "User roles can be assigned to a user only once at a time", + ) + ] + + @api.depends("date_from", "date_to") + def _compute_is_enabled(self): + today = datetime.date.today() + for role_line in self: + role_line.is_enabled = True + if role_line.date_from: + date_from = role_line.date_from + if date_from > today: + role_line.is_enabled = False + if role_line.date_to: + date_to = role_line.date_to + if today > date_to: + role_line.is_enabled = False + + def unlink(self): + users = self.mapped("user_id") + res = super().unlink() + users.set_groups_from_roles(force=True) + return res diff --git a/base_user_role/models/user.py b/base_user_role/models/user.py new file mode 100644 index 00000000..28a7228e --- /dev/null +++ b/base_user_role/models/user.py @@ -0,0 +1,107 @@ +# Copyright 2014 ABF OSIELL +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import api, fields, models + + +class ResUsers(models.Model): + _inherit = "res.users" + + role_line_ids = fields.One2many( + comodel_name="res.users.role.line", + inverse_name="user_id", + string="Role lines", + default=lambda self: self._default_role_lines(), + groups="base.group_erp_manager", + ) + + show_alert = fields.Boolean(compute="_compute_show_alert") + + @api.depends("role_line_ids") + def _compute_show_alert(self): + for user in self: + user.show_alert = user.role_line_ids.filtered(lambda rec: rec.is_enabled) + + role_ids = fields.One2many( + comodel_name="res.users.role", + string="User Roles", + compute="_compute_role_ids", + compute_sudo=True, + groups="base.group_erp_manager", + ) + + @api.model + def _default_role_lines(self): + default_user = self.env.ref("base.default_user", raise_if_not_found=False) + default_values = [] + if default_user: + for role_line in default_user.with_context(active_test=False).role_line_ids: + default_values.append( + { + "role_id": role_line.role_id.id, + "date_from": role_line.date_from, + "date_to": role_line.date_to, + "is_enabled": role_line.is_enabled, + } + ) + return default_values + + @api.depends("role_line_ids.role_id") + def _compute_role_ids(self): + for user in self: + user.role_ids = user.role_line_ids.mapped("role_id") + + @api.model_create_multi + def create(self, vals_list): + new_records = super().create(vals_list) + new_records.set_groups_from_roles() + return new_records + + def write(self, vals): + res = super().write(vals) + self.sudo().set_groups_from_roles() + return res + + def _get_enabled_roles(self): + return self.role_line_ids.filtered(lambda rec: rec.is_enabled) + + @api.model + def _get_self_writable_groups(self): + group = self.env.ref( + "mail.group_mail_notification_type_inbox", raise_if_not_found=False + ) + return group or self.env["res.groups"] + + def set_groups_from_roles(self, force=False): + """Set (replace) the groups following the roles defined on users. + If no role is defined on the user, its groups are let untouched unless + the `force` parameter is `True`. + """ + role_groups = {} + # We obtain all the groups associated to each role first, so that + # it is faster to compare later with each user's groups. + for role in self.mapped("role_line_ids.role_id"): + role_groups[role] = list( + set( + role.group_id.ids + + role.implied_ids.ids + + role.all_implied_ids.ids + ) + ) + self_writable_group_ids = self._get_self_writable_groups().ids + for user in self: + if not user.role_line_ids and not force: + continue + user_group_ids = set(user.group_ids.ids).difference(self_writable_group_ids) + group_ids = set() + for role_line in user._get_enabled_roles(): + role = role_line.role_id + group_ids.update(role_groups[role]) + groups_to_add = group_ids - user_group_ids + groups_to_remove = user_group_ids - group_ids + to_add = [(4, gr) for gr in groups_to_add] + to_remove = [(3, gr) for gr in groups_to_remove] + groups = to_remove + to_add + if groups: + vals = {"group_ids": groups} + super(ResUsers, user).write(vals) + return True diff --git a/base_user_role/pyproject.toml b/base_user_role/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/base_user_role/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/base_user_role/readme/CONFIGURE.md b/base_user_role/readme/CONFIGURE.md new file mode 100644 index 00000000..95a56381 --- /dev/null +++ b/base_user_role/readme/CONFIGURE.md @@ -0,0 +1,22 @@ +To configure this module, you need to go to *Settings / Users / Roles*, +and create a new role. From there, you can add groups to compose your +role, and then associate users to it. + +You can also define default roles for a new user by editing the user +called "Default User". + +Roles: + +![](/OCA/server-backend/16.0/base_user_role/static/description/roles.png) + +Add groups: + +![](/OCA/server-backend/16.0/base_user_role/static/description/role_groups.png) + +Add users (with dates or not): + +![](/OCA/server-backend/16.0/base_user_role/static/description/role_users.png) + +Instead of creating roles from scratch, it is possible to create a role +based on the groups of an existing user: select or open the user and +choose "Create role from user" in the action menu. diff --git a/base_user_role/readme/CONTRIBUTORS.md b/base_user_role/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..39d94fbe --- /dev/null +++ b/base_user_role/readme/CONTRIBUTORS.md @@ -0,0 +1,15 @@ +- Sébastien Alix \<\> +- Duc, Dao Dong \<\> + () +- Jean-Charles Drubay \<\> + () +- Alan Ramos \<\> () +- Harald Panten \<\> +- Kevin Khao \<\> +- Tatiana Deribina \<\> + () +- Guillem Casassas \<\> +- Guillaume Pothier \<\> + +Do not contact contributors directly about support or help with +technical issues. diff --git a/base_user_role/readme/CREDITS.md b/base_user_role/readme/CREDITS.md new file mode 100644 index 00000000..7c749e6c --- /dev/null +++ b/base_user_role/readme/CREDITS.md @@ -0,0 +1,5 @@ +## Images + +- Oxygen Team: + [Icon](http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org/Actions-user-group-new-icon.html) + (LGPL) diff --git a/base_user_role/readme/DESCRIPTION.md b/base_user_role/readme/DESCRIPTION.md new file mode 100644 index 00000000..42ca49c0 --- /dev/null +++ b/base_user_role/readme/DESCRIPTION.md @@ -0,0 +1,22 @@ +This module was written to extend the standard functionality regarding +users and groups management. It helps creating well-defined user roles +and associating them to users. + +It can become very hard to maintain a large number of user profiles over +time, juggling with many technical groups. For this purpose, this module +will help you to: + +> - define functional roles by aggregating low-level groups, +> - set user accounts with the predefined roles (roles are cumulative), +> - update groups of all relevant user accounts (all at once), +> - ensure that user accounts will have the groups defined in their +> roles (nothing more, nothing less). In other words, you can not set +> groups manually on a user as long as there is roles configured on +> it, +> - activate/deactivate roles depending on the date (useful to plan +> holidays, etc) +> - get a quick overview of roles and the related user accounts. + +That way you make clear the different responsabilities within a company, +and are able to add and update user accounts in a scalable and reliable +way. diff --git a/base_user_role/readme/USAGE.md b/base_user_role/readme/USAGE.md new file mode 100644 index 00000000..8d016e3f --- /dev/null +++ b/base_user_role/readme/USAGE.md @@ -0,0 +1,5 @@ +To use this module, you need to: + +1. Go to Configuration / Users / Users choose user and set Roles: + +![image](/OCA/server-backend/base_user_role/static/description/user_form.png) diff --git a/base_user_role/security/ir.model.access.csv b/base_user_role/security/ir.model.access.csv new file mode 100644 index 00000000..74d2512a --- /dev/null +++ b/base_user_role/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_res_users_role,access_res_users_role,model_res_users_role,"base.group_erp_manager",1,1,1,1 +access_res_users_role_line,access_res_users_role_line,model_res_users_role_line,"base.group_erp_manager",1,1,1,1 +access_wizard_create_role_from_user,access_wizard_create_role_from_user,model_wizard_create_role_from_user,"base.group_erp_manager",1,1,1,1 +access_wizard_groups_into_role,access_wizard_groups_into_role,model_wizard_groups_into_role,"base.group_erp_manager",1,1,1,1 +access_role_add_users_wizard,access_role_add_users_wizard,model_role_add_users_wizard,base.group_erp_manager,1,1,1,1 diff --git a/base_user_role/static/description/icon.png b/base_user_role/static/description/icon.png new file mode 100644 index 00000000..4a8a6d74 Binary files /dev/null and b/base_user_role/static/description/icon.png differ diff --git a/base_user_role/static/description/index.html b/base_user_role/static/description/index.html new file mode 100644 index 00000000..00038a43 --- /dev/null +++ b/base_user_role/static/description/index.html @@ -0,0 +1,507 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

User roles

+ +

Production/Stable License: LGPL-3 OCA/server-backend Translate me on Weblate Try me on Runboat

+

This module was written to extend the standard functionality regarding +users and groups management. It helps creating well-defined user roles +and associating them to users.

+

It can become very hard to maintain a large number of user profiles over +time, juggling with many technical groups. For this purpose, this module +will help you to:

+
+
    +
  • define functional roles by aggregating low-level groups,
  • +
  • set user accounts with the predefined roles (roles are cumulative),
  • +
  • update groups of all relevant user accounts (all at once),
  • +
  • ensure that user accounts will have the groups defined in their +roles (nothing more, nothing less). In other words, you can not set +groups manually on a user as long as there is roles configured on +it,
  • +
  • activate/deactivate roles depending on the date (useful to plan +holidays, etc)
  • +
  • get a quick overview of roles and the related user accounts.
  • +
+
+

That way you make clear the different responsabilities within a company, +and are able to add and update user accounts in a scalable and reliable +way.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to go to Settings / Users / Roles, +and create a new role. From there, you can add groups to compose your +role, and then associate users to it.

+

You can also define default roles for a new user by editing the user +called “Default User”.

+

Roles:

+

image1

+

Add groups:

+

image2

+

Add users (with dates or not):

+

image3

+

Instead of creating roles from scratch, it is possible to create a role +based on the groups of an existing user: select or open the user and +choose “Create role from user” in the action menu.

+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Configuration / Users / Users choose user and set Roles:
  2. +
+

image

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • ABF OSIELL
  • +
+
+
+

Contributors

+ +

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

+
+
+

Other credits

+
+

Images

+
    +
  • Oxygen Team: +Icon +(LGPL)
  • +
+
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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.

+

Current maintainers:

+

sebalix jcdrubay novawish

+

This module is part of the OCA/server-backend project on GitHub.

+

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

+
+
+
+
+ + diff --git a/base_user_role/static/description/role_groups.png b/base_user_role/static/description/role_groups.png new file mode 100644 index 00000000..ee31ef97 Binary files /dev/null and b/base_user_role/static/description/role_groups.png differ diff --git a/base_user_role/static/description/role_users.png b/base_user_role/static/description/role_users.png new file mode 100644 index 00000000..ceb7f6ea Binary files /dev/null and b/base_user_role/static/description/role_users.png differ diff --git a/base_user_role/static/description/roles.png b/base_user_role/static/description/roles.png new file mode 100644 index 00000000..e3f0d4a6 Binary files /dev/null and b/base_user_role/static/description/roles.png differ diff --git a/base_user_role/static/description/user_form.png b/base_user_role/static/description/user_form.png new file mode 100644 index 00000000..78e6a1cf Binary files /dev/null and b/base_user_role/static/description/user_form.png differ diff --git a/base_user_role/tests/__init__.py b/base_user_role/tests/__init__.py new file mode 100644 index 00000000..8b001302 --- /dev/null +++ b/base_user_role/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_user_role +from . import test_role_add_users_wizard +from . import test_cron diff --git a/base_user_role/tests/test_cron.py b/base_user_role/tests/test_cron.py new file mode 100644 index 00000000..adf7371f --- /dev/null +++ b/base_user_role/tests/test_cron.py @@ -0,0 +1,73 @@ +# Copyright 2024 DOB +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo.tests.common import TransactionCase + + +class TestUserRoleCron(TransactionCase): + """Tests for the scheduled role synchronization cron job. + + Validates: Requirement 7.3 + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( + context=dict(cls.env.context, tracking_disable=True, no_reset_password=True) + ) + cls.role_model = cls.env["res.users.role"] + cls.user_model = cls.env["res.users"] + + cls.group_user = cls.env.ref("base.group_user") + cls.group_no_one = cls.env.ref("base.group_no_one") + + cls.role = cls.role_model.create( + { + "name": "CRON_TEST_ROLE", + "implied_ids": [(6, 0, [cls.group_user.id, cls.group_no_one.id])], + } + ) + + cls.user1 = cls.user_model.create( + {"name": "Cron Test User 1", "login": "cron_test_user_1"} + ) + cls.user2 = cls.user_model.create( + {"name": "Cron Test User 2", "login": "cron_test_user_2"} + ) + + def test_cron_update_users_syncs_group_membership(self): + """WHEN the role sync cron is called, group membership is updated + for all users with roles. + + Validates: Requirement 7.3 + """ + # Assign the role to both users + self.user1.write({"role_line_ids": [(0, 0, {"role_id": self.role.id})]}) + self.user2.write({"role_line_ids": [(0, 0, {"role_id": self.role.id})]}) + + expected_groups = set( + self.role.group_id.ids + + self.role.implied_ids.ids + + self.role.trans_implied_ids.ids + ) + + # Manually clear groups to simulate a desync state + for user in (self.user1, self.user2): + super(type(user), user).write({"group_ids": [(5,)]}) + + # Verify groups are cleared + self.assertFalse( + expected_groups.issubset(set(self.user1.group_ids.ids)), + "Groups should be cleared before cron runs", + ) + + # Run the cron + self.role_model.cron_update_users() + + # Verify groups are restored for both users + for user in (self.user1, self.user2): + user_group_ids = set(user.group_ids.ids) + self.assertTrue( + expected_groups.issubset(user_group_ids), + f"User {user.name} should have all role groups after cron sync", + ) diff --git a/base_user_role/tests/test_role_add_users_wizard.py b/base_user_role/tests/test_role_add_users_wizard.py new file mode 100644 index 00000000..3ae637bc --- /dev/null +++ b/base_user_role/tests/test_role_add_users_wizard.py @@ -0,0 +1,118 @@ +from odoo import Command +from odoo.tests.common import TransactionCase + + +class TestRoleAddUsersWizard(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.role = cls.env["res.users.role"].create( + { + "name": "Test Role", + } + ) + cls.user1 = cls.env["res.users"].create( + { + "name": "Test User 1", + "login": "testuser1", + "email": "testuser1@example.com", + } + ) + cls.user2 = cls.env["res.users"].create( + { + "name": "Test User 2", + "login": "testuser2", + "email": "testuser2@example.com", + } + ) + cls.user3 = cls.env["res.users"].create( + { + "name": "Test User 3", + "login": "testuser3", + "email": "testuser3@example.com", + } + ) + + def test_add_new_users_to_role(self): + """Test adding new users to a role without existing users""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user1.id, self.user2.id])], + "date_from": "2024-01-01", + "date_to": "2024-12-31", + } + ) + + result = wizard.action_add_users() + self.assertEqual(result["type"], "ir.actions.act_window_close") + self.assertEqual(len(self.role.line_ids), 2) + self.assertIn(self.user1, self.role.line_ids.mapped("user_id")) + self.assertIn(self.user2, self.role.line_ids.mapped("user_id")) + for line in self.role.line_ids: + self.assertEqual(str(line.date_from), "2024-01-01") + self.assertEqual(str(line.date_to), "2024-12-31") + + def test_add_users_with_existing_users(self): + """Test adding users when some already exist in the role""" + self.env["res.users.role.line"].create( + { + "role_id": self.role.id, + "user_id": self.user1.id, + } + ) + + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user1.id, self.user2.id])], + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 2) + users_in_role = self.role.line_ids.mapped("user_id") + self.assertIn(self.user1, users_in_role) + self.assertIn(self.user2, users_in_role) + + user1_lines = self.role.line_ids.filtered( + lambda line: line.user_id == self.user1 + ) + self.assertEqual(len(user1_lines), 1) + + def test_add_users_without_dates(self): + """Test adding users without specifying dates""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [Command.set([self.user3.id])], + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 1) + line = self.role.line_ids[0] + self.assertEqual(line.user_id, self.user3) + self.assertFalse(line.date_from) + self.assertFalse(line.date_to) + + def test_add_multiple_new_users(self): + """Test adding multiple new users at once""" + wizard = self.env["role.add.users.wizard"].create( + { + "role_id": self.role.id, + "user_ids": [ + Command.set([self.user1.id, self.user2.id, self.user3.id]) + ], + "date_from": "2024-06-01", + } + ) + + wizard.action_add_users() + self.assertEqual(len(self.role.line_ids), 3) + users_in_role = self.role.line_ids.mapped("user_id") + self.assertEqual( + set(users_in_role.ids), {self.user1.id, self.user2.id, self.user3.id} + ) + for line in self.role.line_ids: + self.assertEqual(str(line.date_from), "2024-06-01") diff --git a/base_user_role/tests/test_user_role.py b/base_user_role/tests/test_user_role.py new file mode 100644 index 00000000..ddaa5009 --- /dev/null +++ b/base_user_role/tests/test_user_role.py @@ -0,0 +1,291 @@ +# Copyright 2014 ABF OSIELL +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +import datetime + +from odoo import fields +from odoo.exceptions import AccessError +from odoo.tests import tagged +from odoo.tests.common import TransactionCase + + +class TestUserRole(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( + context=dict(cls.env.context, tracking_disable=True, no_reset_password=True) + ) + cls.user_model = cls.env["res.users"] + cls.role_model = cls.env["res.users.role"] + cls.wiz_model = cls.env["wizard.groups.into.role"] + + cls.company1 = cls.env.ref("base.main_company") + cls.company2 = cls.env["res.company"].create({"name": "company2"}) + cls.default_user = cls.user_model.create( + {"name": "Default User Template", "login": "default_user_template_test", "active": False} + ) + cls.user_id = cls.user_model.create( + {"name": "USER TEST (ROLES)", "login": "user_test_roles"} + ) + + # ROLE_1 + cls.group_user_id = cls.env.ref("base.group_user") + cls.group_no_one_id = cls.env.ref("base.group_no_one") + vals = { + "name": "ROLE_1", + "implied_ids": [(6, 0, [cls.group_user_id.id, cls.group_no_one_id.id])], + } + cls.role1_id = cls.role_model.create(vals) + + # ROLE_2 + # Must have group_user in order to have sufficient groups. Check: + # github.com/odoo/odoo/commit/c3717f3018ce0571aa41f70da4262cc946d883b4 + cls.group_multi_currency_id = cls.env.ref("base.group_multi_currency") + cls.group_settings_id = cls.env.ref("base.group_system") + vals = { + "name": "ROLE_2", + "implied_ids": [ + ( + 6, + 0, + [ + cls.group_user_id.id, + cls.group_multi_currency_id.id, + cls.group_settings_id.id, + ], + ) + ], + } + cls.role2_id = cls.role_model.create(vals) + + # Setup for multi-company testing + cls.multicompany_user_1 = cls.user_model.create( + { + "name": "User 2", + "company_id": cls.company1.id, + "company_ids": [(6, 0, [cls.company1.id, cls.company2.id])], + "group_ids": [(6, 0, cls.env.ref("base.group_erp_manager").ids)], + "login": "multicompany_user_1", + } + ) + cls.multicompany_user_2 = cls.user_model.create( + { + "name": "User 2", + "company_id": cls.company2.id, + "company_ids": [(6, 0, [cls.company2.id])], + "group_ids": [(6, 0, cls.env.ref("base.group_user").ids)], + "login": "multicompany_user_2", + } + ) + cls.multicompany_role = cls.role_model.create( + { + "name": "MULTICOMPANY_ROLE", + "implied_ids": [(6, 0, [cls.group_user_id.id])], + "line_ids": [(0, 0, {"user_id": cls.multicompany_user_2.id})], + } + ) + + def test_role_1(self): + self.user_id.write({"role_line_ids": [(0, 0, {"role_id": self.role1_id.id})]}) + user_group_ids = sorted({group.id for group in self.user_id.group_ids}) + role_group_ids = self.role1_id.all_implied_ids.ids + role_group_ids.append(self.role1_id.group_id.id) + role_group_ids = sorted(set(role_group_ids)) + self.assertEqual(user_group_ids, role_group_ids) + + def test_role_2(self): + self.user_id.write({"role_line_ids": [(0, 0, {"role_id": self.role2_id.id})]}) + user_group_ids = sorted({group.id for group in self.user_id.group_ids}) + role_group_ids = self.role2_id.all_implied_ids.ids + role_group_ids.append(self.role2_id.group_id.id) + role_group_ids = sorted(set(role_group_ids)) + self.assertEqual(user_group_ids, role_group_ids) + + def test_role_1_2(self): + self.user_id.write( + { + "role_line_ids": [ + (0, 0, {"role_id": self.role1_id.id}), + (0, 0, {"role_id": self.role2_id.id}), + ] + } + ) + user_group_ids = sorted({group.id for group in self.user_id.group_ids}) + role1_group_ids = self.role1_id.all_implied_ids.ids + role1_group_ids.append(self.role1_id.group_id.id) + role2_group_ids = self.role2_id.all_implied_ids.ids + role2_group_ids.append(self.role2_id.group_id.id) + role_group_ids = sorted(set(role1_group_ids + role2_group_ids)) + self.assertEqual(user_group_ids, role_group_ids) + + def test_role_1_2_with_dates(self): + today_str = fields.Date.today() + today = fields.Date.from_string(today_str) + yesterday = today - datetime.timedelta(days=1) + yesterday_str = fields.Date.to_string(yesterday) + self.user_id.write( + { + "role_line_ids": [ + # Role 1 should be enabled + (0, 0, {"role_id": self.role1_id.id, "date_from": today_str}), + # Role 2 should be disabled + (0, 0, {"role_id": self.role2_id.id, "date_to": yesterday_str}), + ] + } + ) + user_group_ids = sorted({group.id for group in self.user_id.group_ids}) + role1_group_ids = self.role1_id.all_implied_ids.ids + role1_group_ids.append(self.role1_id.group_id.id) + role_group_ids = sorted(set(role1_group_ids)) + self.assertEqual(user_group_ids, role_group_ids) + + def test_role_unlink(self): + # Get role1 and role2 groups + role1_groups = self.role1_id.all_implied_ids | self.role1_id.group_id + role2_groups = self.role2_id.all_implied_ids | self.role2_id.group_id + + # Configure the user with role1 and role2 + self.user_id.write( + { + "role_line_ids": [ + (0, 0, {"role_id": self.role1_id.id}), + (0, 0, {"role_id": self.role2_id.id}), + ] + } + ) + # Check user has groups from role1 and role2 + self.assertLessEqual(role1_groups, self.user_id.group_ids) + self.assertLessEqual(role2_groups, self.user_id.group_ids) + # Remove role2 + self.role2_id.unlink() + # Check user has groups from only role1 + self.assertLessEqual(role1_groups, self.user_id.group_ids) + self.assertFalse(role2_groups <= self.user_id.group_ids) + # Remove role1 + self.role1_id.unlink() + # Check user has no groups from role1 and role2 + self.assertFalse(role1_groups <= self.user_id.group_ids) + self.assertFalse(role2_groups <= self.user_id.group_ids) + + def test_role_line_unlink(self): + # Get role1 and role2 groups + role1_groups = self.role1_id.all_implied_ids | self.role1_id.group_ids + role2_groups = self.role2_id.all_implied_ids | self.role2_id.group_ids + + # Configure the user with role1 and role2 + self.user_id.write( + { + "role_line_ids": [ + (0, 0, {"role_id": self.role1_id.id}), + (0, 0, {"role_id": self.role2_id.id}), + ] + } + ) + # Check user has groups from role1 and role2 + self.assertLessEqual(role1_groups, self.user_id.group_ids) + self.assertLessEqual(role2_groups, self.user_id.group_ids) + # Remove role2 from the user + self.user_id.role_line_ids.filtered( + lambda rl: rl.role_id.id == self.role2_id.id + ).unlink() + # Check user has groups from only role1 + self.assertLessEqual(role1_groups, self.user_id.group_ids) + self.assertFalse(role2_groups <= self.user_id.group_ids) + # Remove role1 from the user + self.user_id.role_line_ids.filtered( + lambda rl: rl.role_id.id == self.role1_id.id + ).unlink() + # Check user has no groups from role1 and role2 + self.assertFalse(role1_groups <= self.user_id.group_ids) + self.assertFalse(role2_groups <= self.user_id.group_ids) + + def test_default_user_roles(self): + self.default_user.write( + { + "role_line_ids": [ + (0, 0, {"role_id": self.role1_id.id}), + (0, 0, {"role_id": self.role2_id.id}), + ] + } + ) + user = self.user_model.create( + {"name": "USER TEST (DEFAULT ROLES)", "login": "user_test_default_roles"} + ) + roles = self.role_model.browse([self.role1_id.id, self.role2_id.id]) + self.assertEqual(user.role_ids, roles) + + def test_role_multicompany(self): + """Test AccessError when admin-like user accesses a role""" + role = self.multicompany_role.with_user(self.multicompany_user_1) + # Dummy read to check that multicompany user 1 has read access + role.read() + # Dummy read to check that multicompany user 1 has read access on the + # whole role, even if it's using a different company than multicompany + # user 2 (which is included in the role) + role.with_context(allowed_company_ids=self.company1.ids).read() + # Downgrade multicompany user 1 to common user + self.multicompany_user_1.write( + {"group_ids": [(6, 0, self.env.ref("base.group_user").ids)]} + ) + # Check that the user cannot read multicompany data again since it lost + # its admin privileges + with self.assertRaisesRegex( + AccessError, "You are not allowed to access 'User Role'" + ): + role.read() + + @tagged("-at_install", "post_install") + def test_notification_type_not_reset(self): + """Test that roles don't reset notification settings.""" + if self.env["ir.module.module"]._get("mail").state != "installed": + self.skipTest("Mail module is not installed.") + notification_group = self.env.ref("mail.group_mail_notification_type_inbox") + self.assertNotIn(notification_group, self.user_id.group_ids) + self.user_id.notification_type = "inbox" + self.assertIn(notification_group, self.user_id.group_ids) + self.user_id.write({"role_line_ids": [(0, 0, {"role_id": self.role1_id.id})]}) + self.assertIn(notification_group, self.user_id.group_ids) + + def test_create_role_from_user(self): + # Use a wizard instance to create a new role based on the user. + # We use assign_to_user = False, as otherwise this module forcibly + # assigns the role's groups to the user, which would make this + # test useless. + wizard = self.env["wizard.create.role.from.user"].create( + { + "name": "Role for user (without assign)", + "assign_to_user": False, + } + ) + result = wizard.with_context(active_ids=[self.user_id.id]).create_from_user() + + # Check that the role has the same groups as the user + role_id = result["res_id"] + role = self.role_model.browse([role_id]) + user_group_ids = sorted(set(self.user_id.group_ids.ids)) + role_group_ids = sorted(set(role.all_implied_ids.ids)) + self.assertEqual(user_group_ids, role_group_ids) + + def test_show_alert_computation(self): + """Test the computation of the `show_alert` field.""" + self.user_id.write({"role_line_ids": [(0, 0, {"role_id": self.role1_id.id})]}) + self.assertTrue(self.user_id.show_alert) + + # disable role + self.user_id.role_line_ids.unlink() + self.assertFalse(self.user_id.show_alert) + + def test_group_groups_into_role(self): + user_group_ids = self.user_id.group_ids.ids + # Check that there is not a role with name: Test Role + self.assertFalse(self.role_model.search([("name", "=", "Test Role")])) + # Call create_role function to group groups into a role + wizard = self.wiz_model.with_context(active_ids=user_group_ids).create( + {"name": "Test Role"} + ) + res = wizard.create_role() + # Check that a role with name: Test Role has been created + new_role = self.env[res["res_model"]].browse(res["res_id"]) + self.assertEqual(new_role.name, "Test Role") + # Check that the role has the correct groups (even if the order is not equal) + self.assertEqual(set(new_role.implied_ids.ids), set(user_group_ids)) diff --git a/base_user_role/views/group.xml b/base_user_role/views/group.xml new file mode 100644 index 00000000..99d5ca92 --- /dev/null +++ b/base_user_role/views/group.xml @@ -0,0 +1,23 @@ + + + + res.groups.form - base_user_role + res.groups + + + +
+ +
+
+
+
+
diff --git a/base_user_role/views/role.xml b/base_user_role/views/role.xml new file mode 100644 index 00000000..acd2aae4 --- /dev/null +++ b/base_user_role/views/role.xml @@ -0,0 +1,107 @@ + + + + + res.users.role.form + res.users.role + +
+ +
+ + +
+ + + + + + + + + +
+ + + diff --git a/dadata_connector/tests/__init__.py b/dadata_connector/tests/__init__.py new file mode 100644 index 00000000..0d802f01 --- /dev/null +++ b/dadata_connector/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_res_partner +from . import test_wizard diff --git a/dadata_connector/tests/common.py b/dadata_connector/tests/common.py new file mode 100644 index 00000000..fc81e9ee --- /dev/null +++ b/dadata_connector/tests/common.py @@ -0,0 +1,99 @@ +from odoo.tests.common import TransactionCase + + +# Minimal DaData API response fixture for a legal entity (ООО) +DADATA_LEGAL_RESPONSE = [ + { + "data": { + "type": "LEGAL", + "inn": "7707083893", + "ogrn": "1027700132195", + "kpp": "773601001", + "okpo": "00032537", + "okved": "64.19", + "opf": {"code": "12300"}, + "name": { + "short_with_opf": "ПАО Сбербанк", + "full_with_opf": "Публичное акционерное общество «Сбербанк России»", + }, + "state": {"status": "ACTIVE"}, + "address": { + "unrestricted_value": "117997, г Москва, ул Вавилова, д 19", + "data": { + "country_iso_code": "RU", + "region_iso_code": "RU-MOW", + "city": "Москва", + "street_with_type": "ул Вавилова", + "house_type_full": "дом", + "house": "19", + "flat_type_full": None, + "flat": None, + "postal_code": "117997", + }, + }, + "documents": { + "fts_registration": { + "series": "77", + "number": "004599035", + "issue_date": "2002-08-16", + } + }, + "management": { + "name": "ГРЕФ ГЕРМАН ОСКАРОВИЧ", + "post": "ПРЕЗИДЕНТ, ПРЕДСЕДАТЕЛЬ ПРАВЛЕНИЯ", + }, + } + } +] + +# Minimal DaData API response fixture for an individual entrepreneur (ИП) +DADATA_INDIVIDUAL_RESPONSE = [ + { + "data": { + "type": "INDIVIDUAL", + "inn": "500100732259", + "ogrn": "304500116000157", + "kpp": None, + "okpo": "0107544", + "okved": "47.91", + "opf": {"code": "50102"}, + "fio": { + "surname": "ИВАНОВ", + "name": "ИВАН", + "patronymic": "ИВАНОВИЧ", + }, + "state": {"status": "ACTIVE"}, + "address": { + "unrestricted_value": "141001, Московская обл, г Мытищи", + "data": { + "country_iso_code": "RU", + "region_iso_code": "RU-MOS", + "city": "Мытищи", + "street_with_type": None, + "house_type_full": None, + "house": None, + "flat_type_full": None, + "flat": None, + "postal_code": "141001", + }, + }, + "documents": {"fts_registration": None}, + "management": None, + } + } +] + + +class DadataConnectorCommon(TransactionCase): + """Base class for dadata_connector tests.""" + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner = cls.env["res.partner"].create({ + "name": "Test Partner", + "is_company": True, + }) + cls.env["ir.config_parameter"].sudo().set_param( + "dadata_connector.dadata_token", "test_token_123" + ) diff --git a/dadata_connector/tests/test_res_partner.py b/dadata_connector/tests/test_res_partner.py new file mode 100644 index 00000000..c6e07047 --- /dev/null +++ b/dadata_connector/tests/test_res_partner.py @@ -0,0 +1,182 @@ +from unittest.mock import MagicMock, patch + +from odoo.exceptions import ValidationError +from odoo.tests.common import tagged + +from .common import ( + DADATA_INDIVIDUAL_RESPONSE, + DADATA_LEGAL_RESPONSE, + DadataConnectorCommon, +) + + +@tagged("post_install", "-at_install") +class TestResPartnerDadata(DadataConnectorCommon): + """Tests for res.partner DaData integration methods.""" + + # ------------------------------------------------------------------ + # get_dadata_token + # ------------------------------------------------------------------ + + def test_get_dadata_token_returns_token(self): + """Token is returned when the system parameter is set.""" + token = self.partner.get_dadata_token() + self.assertEqual(token, "test_token_123") + + def test_get_dadata_token_raises_when_missing(self): + """ValidationError is raised when token is not configured.""" + self.env["ir.config_parameter"].sudo().set_param( + "dadata_connector.dadata_token", "" + ) + with self.assertRaises(ValidationError): + self.partner.get_dadata_token() + + # ------------------------------------------------------------------ + # _parse_dadata_response — legal entity + # ------------------------------------------------------------------ + + def test_parse_legal_entity_basic_fields(self): + """Parsing a legal entity response fills basic partner fields.""" + wizard_data, result = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + + self.assertEqual(result["vat"], "7707083893") + self.assertEqual(result["ogrn"], "1027700132195") + self.assertEqual(result["kpp"], "773601001") + self.assertEqual(result["okpo"], "00032537") + self.assertEqual(result["arceat"], "64.19") + self.assertEqual(result["name"], "ПАО Сбербанк") + self.assertEqual(result["city"], "Москва") + self.assertEqual(result["zip"], "117997") + self.assertEqual(result["street"], "ул Вавилова, дом, 19") + + def test_parse_legal_entity_company_form(self): + """OPF code 12300 maps to 'plc' company form.""" + _, result = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + self.assertEqual(result["company_form"], "plc") + + def test_parse_legal_entity_wizard_data(self): + """Wizard data contains status, organization_type, name and address.""" + wizard_data, _ = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + + self.assertEqual(wizard_data["status"], "active") + self.assertEqual(wizard_data["organization_type"], "legal") + self.assertEqual(wizard_data["name"], "ПАО Сбербанк") + self.assertIn("Вавилова", wizard_data["full_address"]) + + def test_parse_legal_entity_management(self): + """Management data is extracted when present.""" + _, result = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + + self.assertIn("management", result) + self.assertEqual(result["management"]["manager_name"], "ГРЕФ ГЕРМАН ОСКАРОВИЧ") + self.assertEqual( + result["management"]["manager_position"], + "ПРЕЗИДЕНТ, ПРЕДСЕДАТЕЛЬ ПРАВЛЕНИЯ", + ) + + def test_parse_legal_entity_fts_registration(self): + """FTS registration series and number are concatenated correctly.""" + _, result = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + self.assertEqual(result["sp_register_number"], "77 004599035") + self.assertEqual(result["sp_register_date"], "2002-08-16") + + def test_parse_legal_entity_country_and_state(self): + """Country and state are resolved from ISO codes when they exist in DB.""" + russia = self.env["res.country"].search([("code", "=", "RU")], limit=1) + if not russia: + self.skipTest("Russia not found in res.country — l10n data not loaded") + + _, result = self.partner._parse_dadata_response(DADATA_LEGAL_RESPONSE) + self.assertEqual(result["country_id"][0], russia.id) + + # ------------------------------------------------------------------ + # _parse_dadata_response — individual entrepreneur + # ------------------------------------------------------------------ + + def test_parse_individual_name(self): + """Individual entrepreneur name is built from fio parts.""" + _, result = self.partner._parse_dadata_response(DADATA_INDIVIDUAL_RESPONSE) + self.assertEqual(result["name"], "ИВАНОВ ИВАН ИВАНОВИЧ") + + def test_parse_individual_no_kpp(self): + """Individual entrepreneur response does not set kpp.""" + _, result = self.partner._parse_dadata_response(DADATA_INDIVIDUAL_RESPONSE) + self.assertNotIn("kpp", result) + + def test_parse_individual_no_management(self): + """No management key in result when management is absent.""" + _, result = self.partner._parse_dadata_response(DADATA_INDIVIDUAL_RESPONSE) + self.assertNotIn("management", result) + + def test_parse_individual_no_fts_registration(self): + """No sp_register_number when fts_registration is None.""" + _, result = self.partner._parse_dadata_response(DADATA_INDIVIDUAL_RESPONSE) + self.assertNotIn("sp_register_number", result) + + # ------------------------------------------------------------------ + # get_legal_entity_data + # ------------------------------------------------------------------ + + @patch("myaddons.dob.dadata_connector.models.res_partner.Dadata") + def test_get_legal_entity_data_returns_action(self, MockDadata): + """get_legal_entity_data returns an act_window action when widget=True.""" + mock_instance = MagicMock() + mock_instance.find_by_id.return_value = DADATA_LEGAL_RESPONSE + MockDadata.return_value = mock_instance + + action = self.partner.get_legal_entity_data(vat="7707083893", widget=True) + + self.assertEqual(action["type"], "ir.actions.act_window") + self.assertEqual(action["res_model"], "res.partner.auto_data.wizard") + self.assertEqual(action["target"], "new") + + @patch("myaddons.dob.dadata_connector.models.res_partner.Dadata") + def test_get_legal_entity_data_returns_dict_when_no_widget(self, MockDadata): + """get_legal_entity_data returns raw data dict when widget=False.""" + mock_instance = MagicMock() + mock_instance.find_by_id.return_value = DADATA_LEGAL_RESPONSE + MockDadata.return_value = mock_instance + + result = self.partner.get_legal_entity_data(vat="7707083893", widget=False) + + self.assertIsInstance(result, dict) + self.assertEqual(result["vat"], "7707083893") + + @patch("myaddons.dob.dadata_connector.models.res_partner.Dadata") + def test_get_legal_entity_data_raises_when_empty(self, MockDadata): + """ValidationError is raised when DaData returns no results.""" + mock_instance = MagicMock() + mock_instance.find_by_id.return_value = [] + MockDadata.return_value = mock_instance + + with self.assertRaises(ValidationError): + self.partner.get_legal_entity_data(vat="0000000000", widget=False) + + @patch("myaddons.dob.dadata_connector.models.res_partner.Dadata") + def test_get_legal_entity_data_raises_on_http_error(self, MockDadata): + """ValidationError is raised on HTTPStatusError from DaData.""" + from httpx import HTTPStatusError, Request, Response + + mock_instance = MagicMock() + mock_instance.find_by_id.side_effect = HTTPStatusError( + "401", request=MagicMock(spec=Request), response=MagicMock(spec=Response) + ) + MockDadata.return_value = mock_instance + + with self.assertRaises(ValidationError): + self.partner.get_legal_entity_data(vat="7707083893", widget=False) + + # ------------------------------------------------------------------ + # _get_view + # ------------------------------------------------------------------ + + def test_get_view_sets_dadata_search_widget_on_vat(self): + """_get_view replaces widget on vat field with dadata_search.""" + arch, _view = self.env["res.partner"]._get_view(view_type="form") + vat_nodes = arch.xpath("//field[@name='vat']") + for node in vat_nodes: + self.assertEqual( + node.get("widget"), + "dadata_search", + "vat field must use dadata_search widget", + ) diff --git a/dadata_connector/tests/test_wizard.py b/dadata_connector/tests/test_wizard.py new file mode 100644 index 00000000..7a019b5c --- /dev/null +++ b/dadata_connector/tests/test_wizard.py @@ -0,0 +1,47 @@ +from odoo.tests.common import tagged + +from .common import DadataConnectorCommon + + +@tagged("post_install", "-at_install") +class TestResPartnerAutoDataWizard(DadataConnectorCommon): + """Tests for res.partner.auto_data.wizard.""" + + def _create_wizard(self, **kwargs): + vals = { + "partner_id": self.partner.id, + "name": "ПАО Тест", + "status": "active", + "organization_type": "legal", + "full_address": "117997, г Москва, ул Вавилова, д 19", + } + vals.update(kwargs) + return self.env["res.partner.auto_data.wizard"].create(vals) + + def test_wizard_creation(self): + """Wizard record is created with expected field values.""" + wizard = self._create_wizard() + self.assertEqual(wizard.name, "ПАО Тест") + self.assertEqual(wizard.status, "active") + self.assertEqual(wizard.organization_type, "legal") + self.assertEqual(wizard.partner_id, self.partner) + + def test_button_yes_returns_close_action(self): + """button_yes returns act_window_close with update flag.""" + wizard = self._create_wizard() + result = wizard.button_yes() + + self.assertEqual(result["type"], "ir.actions.act_window_close") + self.assertTrue(result["infos"]["update"]) + + def test_wizard_status_selection_values(self): + """All expected status values are accepted.""" + statuses = ["active", "liquidating", "liquidated", "bankrupt", "reorganizing"] + for status in statuses: + wizard = self._create_wizard(status=status) + self.assertEqual(wizard.status, status) + + def test_wizard_organization_type_individual(self): + """Wizard accepts individual organization type.""" + wizard = self._create_wizard(organization_type="individual") + self.assertEqual(wizard.organization_type, "individual") diff --git a/dadata_connector/views/res_config_settings_view.xml b/dadata_connector/views/res_config_settings_view.xml new file mode 100644 index 00000000..32f85d47 --- /dev/null +++ b/dadata_connector/views/res_config_settings_view.xml @@ -0,0 +1,16 @@ + + + + res.config.settings.view.form.inherit.dadata + res.config.settings + + + + + + + + + + + diff --git a/dadata_connector/views/res_partner_views.xml b/dadata_connector/views/res_partner_views.xml new file mode 100644 index 00000000..23a7c4da --- /dev/null +++ b/dadata_connector/views/res_partner_views.xml @@ -0,0 +1,28 @@ + + + + + Partner with auto data view form + res.partner + + + + dadata_search + + + + + + Partner with auto data view form 2 + res.partner + 2 + + + + + dadata_search + + + + + diff --git a/dadata_connector/wizard/__init__.py b/dadata_connector/wizard/__init__.py new file mode 100644 index 00000000..288e4db1 --- /dev/null +++ b/dadata_connector/wizard/__init__.py @@ -0,0 +1 @@ +from . import res_partner_auto_data_wizard diff --git a/dadata_connector/wizard/res_partner_auto_data_wizard.py b/dadata_connector/wizard/res_partner_auto_data_wizard.py new file mode 100644 index 00000000..7caeaf79 --- /dev/null +++ b/dadata_connector/wizard/res_partner_auto_data_wizard.py @@ -0,0 +1,40 @@ +from odoo import fields, models + + +class ResPartnerAutoDataWizard(models.TransientModel): + _name = "res.partner.auto_data.wizard" + _description = "Wizard for autofilling partner" + + partner_id = fields.Many2one( + string="Partner", + comodel_name="res.partner", + ) + + vat = fields.Char( + string="Identification Number", help="Identification Number for selected type" + ) + + status = fields.Selection( + string="Status", + selection=[ + ("active", "Active"), + ("liquidating", "Liquidating"), + ("liquidated", "Liquidated"), + ("bankrupt", "Bankrupt"), + ("reorganizing", "Reorganizing"), + ], + ) + organization_type = fields.Selection( + string="Type of organization", + selection=[ + ("legal", "Legal entity"), + ("individual", "Individual entrepreneur"), + ], + help="Legal entity or individual entrepreneur", + ) + name = fields.Char(string="Full name") + + full_address = fields.Text(string="Full legal address") + + def button_yes(self): + return {"type": "ir.actions.act_window_close", "infos": {"update": True}} diff --git a/dadata_connector/wizard/res_partner_auto_data_wizard_views.xml b/dadata_connector/wizard/res_partner_auto_data_wizard_views.xml new file mode 100644 index 00000000..406b6d51 --- /dev/null +++ b/dadata_connector/wizard/res_partner_auto_data_wizard_views.xml @@ -0,0 +1,23 @@ + + + + Partner with auto data wizard view form + res.partner.auto_data.wizard + +
+ + + + + + +
+
+
+
+
+
diff --git a/demo_data_loader_base/__init__.py b/demo_data_loader_base/__init__.py new file mode 100644 index 00000000..a0fdc10f --- /dev/null +++ b/demo_data_loader_base/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/demo_data_loader_base/__manifest__.py b/demo_data_loader_base/__manifest__.py new file mode 100644 index 00000000..053df9d0 --- /dev/null +++ b/demo_data_loader_base/__manifest__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Demo Data Loader Base', + 'version': '1.0', + 'category': 'Technical', + 'summary': 'Base module: adds "Load Demo Data" button in Settings', + 'depends': ['base_setup'], + 'data': [ + 'views/res_config_settings_views.xml', + ], + 'installable': True, + 'application': False, + 'license': 'LGPL-3', +} diff --git a/demo_data_loader_base/models/__init__.py b/demo_data_loader_base/models/__init__.py new file mode 100644 index 00000000..6084d2ca --- /dev/null +++ b/demo_data_loader_base/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import res_config_settings diff --git a/demo_data_loader_base/models/res_config_settings.py b/demo_data_loader_base/models/res_config_settings.py new file mode 100644 index 00000000..cdb2980a --- /dev/null +++ b/demo_data_loader_base/models/res_config_settings.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + module_crm_demo_data_loader = fields.Boolean(string='CRM') + module_account_demo_data_loader = fields.Boolean(string='Бухгалтерия') + module_project_demo_data_loader = fields.Boolean(string='Проекты') + module_sale_demo_data_loader = fields.Boolean(string='Продажи') diff --git a/demo_data_loader_base/static/description/icon.png b/demo_data_loader_base/static/description/icon.png new file mode 100644 index 00000000..36e23a8e Binary files /dev/null and b/demo_data_loader_base/static/description/icon.png differ diff --git a/demo_data_loader_base/views/res_config_settings_views.xml b/demo_data_loader_base/views/res_config_settings_views.xml new file mode 100644 index 00000000..00156719 --- /dev/null +++ b/demo_data_loader_base/views/res_config_settings_views.xml @@ -0,0 +1,50 @@ + + + + + res.config.settings.view.form.inherit.demo.data.loader.base + res.config.settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dms/README.rst b/dms/README.rst new file mode 100644 index 00000000..b34bd4dc --- /dev/null +++ b/dms/README.rst @@ -0,0 +1,253 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +========================== +Document Management System +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:45ce312f2b0dafc58147b67c526a9005653f2ba9a9208468707b3a5986c7450c + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdms-lightgray.png?logo=github + :target: https://github.com/OCA/dms/tree/18.0/dms + :alt: OCA/dms +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/dms-18-0/dms-18-0-dms + :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/dms&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +DMS is a module for creating, managing and viewing document files +directly within Odoo. This module is only the basis for an entire +ecosystem of apps that extend and seamlessly integrate with the document +management system. + +This module adds portal functionality for directories and files for +allowed users, both portal or internal users. You can get as well a +tokenized link from a directory or a file for sharing it with any +anonymous user. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +Preview +------- + +``python-magic`` library is recommended to be installed for having whole +support to get proper file types and file preview. + +Configuration +============= + +Configuration +============= + +To configure this module, you need to: + +1. Create a storage +------------------- + +1. Go to *Documents -> Configuration -> Storages*. + +2. Create a new document storage. You can choose between three options + on ``Save Type``: + + - ``Database``: Store the files on the database as a field + - ``Attachment``: Store the files as attachments + - ``File``: Store the files on the file system + +2. Create an access group +------------------------- + +1. Next, create an administrative access group. Go to *Configuration -> + Access Groups*. + + - Create a new group, name it appropriately, and turn on all three + permissions (Create, Write and Unlink. Read is implied and always + enabled). + - Add any other top-level administrative users to the group if needed + (your user should already be there). + - You can create other groups in here later for fine-grained access + control. + +3. Create a directory +--------------------- + +1. Afterward, go to *Documents -> Directories*. + +2. Create a new directory, mark it as root and select the previously + created setting. + + - Select the *Groups* tab and add your administrative group created + above. If your directory was already created before the group, you + can also add it in the access groups (*Configuration -> Access + Groups*). + +3. In the directory settings, you can also add other access groups + (created above) that will be able to: + + - read + - create + - write + - delete + +Migration +========= + +If you need to modify the storage ``Save Type`` you might want to +migrate the file data. To achieve it, you need to: + +1. Go to *Documents -> Configuration -> Storage* and select the storage + you want to modify +2. Modify the save type +3. Press the button Migrate files if you want to migrate all the files + at once +4. Press the button Manual File Migration to specify files one by one + +You can check all the files that still need to be migrated from all +storages and migrate them manually on *Documents -> Configuration -> +Migration* + +File Wizard Selection +===================== + +There is an action called ``action_dms_file_wizard_selector`` to open a +wizard to list files in kanban view. This can be used (example +dms_attachment_link module) to add a button in kanban view with the +action we need. + +Usage +===== + +The best way to manage the documents is to switch to the Documents view. +Existing documents can be managed there and new documents can be +created. + +Portal functionality +-------------------- + +You can add any portal user to DMS access groups, and then allow that +group in directories, so they will see in the portal such directories +and their files. Another possibility is to click on "Share" button +inside a directory or a file for obtaining a tokenized link for single +access to that resource, no matter if logged or not. + +Known issues / Roadmap +====================== + +- Files preview in portal +- Allow to download folder in portal and create zip file with all + content +- Save in cache own_root directories and update in every + create/write/unlink function +- Add a migration procedure for converting an storage to attachment one + for populating existing records with attachments as folders +- Add a link from attachment view in chatter to linked documents +- If Inherit permissions from related record (the + inherit_access_from_parent_record field from storage) is changed when + directories already exist, inconsistencies may occur because groups + defined in the directories and subdirectories will still exist, all + groups in these directories should be removed before changing. +- Since portal users can read ``dms.storage`` records, if your module + extends this model to another storage backend that needs using + secrets, remember to forbid access to the secrets fields by other + means. It would be nice to be able to remove that rule at some point. +- Searchpanel in files: Highlight items (shading) without records when + filtering something (by name for example). +- Accessing the clipboard (for example copy share link of + file/directory) is limited to secure connections. It also happens in + any part of Odoo. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* MuK IT +* Tecnativa + +Contributors +------------ + +- Mathias Markl +- Enric Tobella +- Antoni Romera +- Gelu Boros +- `Tecnativa `__: + + - Víctor Martínez + - Pedro M. Baeza + - Jairo Llopis + +- `Elego `__: + + - Yu Weng + - Philip Witte + - Khanh Bui + +- `Subteno `__: + + - Timothée Vannier + +- `Kencove `__: + + - Mohamed Alkobrosli + +Other credits +------------- + +Some pictures are based on or inspired by: + +- `Roundicons `__ +- `Smashicons `__ +- `EmojiOne `__ : Portal DMS icon +- `GitHub Octicons `__ : The main + DMS icon + +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/dms `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/dms/__init__.py b/dms/__init__.py new file mode 100644 index 00000000..ada0b87b --- /dev/null +++ b/dms/__init__.py @@ -0,0 +1,3 @@ +from . import controllers +from . import models +from . import wizards diff --git a/dms/__manifest__.py b/dms/__manifest__.py new file mode 100644 index 00000000..14548719 --- /dev/null +++ b/dms/__manifest__.py @@ -0,0 +1,74 @@ +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Document Management System", + "summary": """Document Management System for Odoo""", + "version": "19.0.2025.12.03", + "category": "Document Management", + "license": "LGPL-3", + "website": "https://github.com/OCA/dms", + "author": "MuK IT, Tecnativa, Odoo Community Association (OCA)", + "depends": [ + "mail", + "http_routing", + "onboarding", + "portal", + "base", + "web", + ], + "data": [ + # Security + "security/security.xml", + "security/ir.model.access.csv", + # Actions + "actions/file.xml", + # Templates + "template/portal.xml", + # Data + "data/onboarding_data.xml", + # Views + "views/dms_tag.xml", + "views/dms_category.xml", + "views/dms_file.xml", + "views/dms_directory.xml", + "views/storage.xml", + "views/dms_access_groups_views.xml", + "views/res_config_settings.xml", + "views/menu.xml", + # Wizard + "wizards/wizard_dms_file_move_views.xml", + "wizards/wizard_dms_share_views.xml", + ], + "assets": { + "web.assets_backend": [ + # JS + "dms/static/src/models/*.js", + "dms/static/src/js/fields/path_json/path_owl.esm.js", + "dms/static/src/js/fields/preview_binary/preview_record.esm.js", + "dms/static/src/js/views/*.esm.js", + # XML + "dms/static/src/js/fields/path_json/path_owl.xml", + "dms/static/src/js/fields/preview_binary/preview_record.xml", + "dms/static/src/js/views/*.xml", + ], + "web.assets_frontend": [ + "dms/static/src/scss/portal.scss", + ], + "web.assets_tests": [ + "dms/static/tests/tours/**/*", + ], + }, + "demo": [ + "demo/res_users.xml", + "demo/access_group.xml", + "demo/category.xml", + "demo/tag.xml", + "demo/storage.xml", + "demo/directory.xml", + "demo/file.xml", + ], + "icon": "/dms/static/description/icon.png", + "application": True, +} diff --git a/dms/actions/file.xml b/dms/actions/file.xml new file mode 100644 index 00000000..84a8ff28 --- /dev/null +++ b/dms/actions/file.xml @@ -0,0 +1,14 @@ + + + + + Migrate + + + code + records.action_migrate() + + diff --git a/dms/controllers/__init__.py b/dms/controllers/__init__.py new file mode 100644 index 00000000..984e838a --- /dev/null +++ b/dms/controllers/__init__.py @@ -0,0 +1,2 @@ +from . import main +from . import portal diff --git a/dms/controllers/main.py b/dms/controllers/main.py new file mode 100644 index 00000000..5898e80f --- /dev/null +++ b/dms/controllers/main.py @@ -0,0 +1,15 @@ +# Copyright 2017-2019 MuK IT GmbH +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import http +from odoo.http import request + + +class OnboardingController(http.Controller): + @http.route("/config/dms.forbidden_extensions", type="json", auth="user") + def forbidden_extensions(self, **_kwargs): + params = request.env["ir.config_parameter"].sudo() + return { + "forbidden_extensions": params.get_param( + "dms.forbidden_extensions", default="" + ) + } diff --git a/dms/controllers/portal.py b/dms/controllers/portal.py new file mode 100644 index 00000000..e1eaa7d6 --- /dev/null +++ b/dms/controllers/portal.py @@ -0,0 +1,288 @@ +# Copyright 2020-2021 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée VANNIER (https://www.subteno.com). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +import base64 +from typing import Optional # noqa # pylint: disable=unused-import + +from odoo import _, http +from odoo.http import content_disposition, request +from odoo.osv.expression import OR + +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.addons.web.controllers.utils import ensure_db + + +class CustomerPortal(CustomerPortal): + def _dms_check_access(self, model, res_id, access_token=None): + """ + Check access to the record. + + :param str model: model + :param int res_id: res_id + :param Optional[str] access_token: access_token + + :return: item + """ + item = request.env[model].browse(res_id) + if access_token: + item = item.sudo() + if not item.check_access_token(access_token): + return False + else: + if not item.permission_read: + return False + return item + + def _prepare_home_portal_values(self, counters): + values = super()._prepare_home_portal_values(counters) + if "dms_directory_count" in counters: + ids = request.env["dms.directory"]._get_own_root_directories() + values["dms_directory_count"] = len(ids) + return values + + @http.route(["/my/dms"], type="http", auth="user", website=True) + def portal_my_dms( + self, sortby=None, filterby=None, search=None, search_in="name", **kw + ): + """ + Display the main page for the DMS module. + + :param Optional[str] sortby: The field to sort by + :param Optional[str] filterby: The field to filter by + :param Optional[str] search: The search term + :param Optional[str] search_in: The field to search in + + :return: response + :rtype: odoo.http.Response + """ + values = self._prepare_portal_layout_values() + ( + filterby, + searchbar_inputs, + searchbar_sortings, + sort_order, + sortby, + ) = self._searchbar_data(filterby, sortby) + # domain + domain = [ + ("id", "in", request.env["dms.directory"]._get_own_root_directories()), + ] + # search + if search and search_in == "name": + domain += OR([[], [("name", "ilike", search)]]) + # content according to pager and archive selected + items = request.env["dms.directory"].search(domain, order=sort_order) + request.session["my_dms_folder_history"] = items.ids + # values + values.update( + { + "dms_directories": items, + "page_name": "dms_directory", + "default_url": "/my/dms", + "searchbar_sortings": searchbar_sortings, + "searchbar_inputs": searchbar_inputs, + "search_in": search_in, + "sortby": sortby, + "filterby": filterby, + "access_token": None, + } + ) + return request.render("dms.portal_my_dms", values) + + @http.route( + ["/my/dms/directory/"], + type="http", + auth="public", + website=True, + ) + def portal_my_dms_directory( + self, + dms_directory_id=False, + sortby=None, + filterby=None, + search=None, + search_in="name", + access_token=None, + **kw, + ): + """ + Display the content of a directory. + + :param Optional[int] dms_directory_id: dms_directory_id + :param Optional[str] sortby: sortby + :param Optional[str] filterby: filterby + :param Optional[str] search: search + :param Optional[str] search_in: search_in + :param Optional[str] access_token: access_token + + :return: response + :rtype: odoo.http.Response + """ + ensure_db() + # operations + ( + filterby, + searchbar_inputs, + searchbar_sortings, + sort_order, + sortby, + ) = self._searchbar_data(filterby, sortby) + dms_directory_items, res = self._get_directories( + access_token, dms_directory_id, search, search_in, sort_order + ) + if not res: + return request.redirect("/" if access_token else "/my") + + dms_directory_sudo = res + # dms_files_count + dms_file_items = self._get_files( + access_token, dms_directory_id, search, search_in, sort_order + ) + + dms_parent_categories = dms_directory_sudo.sudo()._get_parent_categories( + access_token + ) + # values + values = { + "dms_directories": dms_directory_items, + "page_name": "dms_directory", + "default_url": "/my/dms", + "searchbar_sortings": searchbar_sortings, + "searchbar_inputs": searchbar_inputs, + "search_in": search_in, + "sortby": sortby, + "filterby": filterby, + "access_token": access_token, + "dms_directory": dms_directory_sudo, + "dms_files": dms_file_items, + "dms_parent_categories": dms_parent_categories, + } + return request.render("dms.portal_my_dms", values) + + def _get_files(self, access_token, dms_directory_id, search, search_in, sort_br): + """ + Get files from dms_directory_id + + :param Optional[str] access_token: access_token + :param int dms_directory_id: dms_directory_id + :param Optional[str] search: search + :param Optional[str] search_in: search_in + :param str sort_br: sort_br + + :return: dms_file_items + :rtype: odoo.model.dms_file + """ + if not dms_directory_id: + return request.env["dms.file"] + file_domain = [ + ("is_hidden", "=", False), + ("directory_id", "=", dms_directory_id), + ] + # search + if search and search_in == "name": + file_domain.append(("name", "ilike", search)) + + # items + file_model = request.env["dms.file"] + is_access_token_valid = file_model.check_access_token(access_token) + file_model = file_model.sudo() if is_access_token_valid else file_model + dms_file_items = file_model.search(file_domain, order=sort_br) + request.session["my_dms_file_history"] = dms_file_items.ids + return dms_file_items + + def _get_directories( + self, access_token, dms_directory_id, search, search_in, sort_order + ): + """ + Get directories from dms_directory_id + + :param Optional[str] access_token: access_token + :param int dms_directory_id: dms_directory_id + :param Optional[str] search: search + :param Optional[str] search_in: search_in + :param str sort_order: sort_br + + :return: dms_directory_items, res + :rtype: tuple[odoo.model.dms_directory, bool|odoo.model.dms_directory] + """ + # domain + domain = [("is_hidden", "=", False), ("parent_id", "=", dms_directory_id)] + # search + if search and search_in: + domain.append(("name", "ilike", search)) + + # content according to pager and archive selected + directory_model = request.env["dms.directory"] + directory_to_check = directory_model.browse(dms_directory_id) + is_access_token_valid = directory_to_check.check_access_token(access_token) + directory_model = ( + directory_model.sudo() if is_access_token_valid else directory_model + ) + dms_directory_items = directory_model.search(domain, order=sort_order) + + request.session["my_dms_folder_history"] = dms_directory_items.ids + res = self._dms_check_access("dms.directory", dms_directory_id, access_token) + return dms_directory_items, res + + def _searchbar_data(self, filterby, sortby): + """ + Prepare searchbar data for portal. + + :param str filterby: filterby + :param str sortby: sortby + + :return: filterby, searchbar_inputs, searchbar_sortings, sort_order, + sortby + :rtype: tuple[str, dict, dict, str, str] + """ + searchbar_sortings = {"name": {"label": _("Name"), "order": "name asc"}} + # default sortby + if not sortby: + sortby = "name" + sort_order = searchbar_sortings[sortby]["order"] + # search + searchbar_inputs = { + "name": {"input": "name", "label": _("Name")}, + } + if not filterby: + filterby = "name" + return ( + filterby, + searchbar_inputs, + searchbar_sortings, + sort_order, + sortby, + ) + + @http.route( + ["/my/dms/file//download"], + type="http", + auth="public", + website=True, + ) + def portal_my_dms_file_download(self, dms_file_id, access_token=None, **kw): + """ + Download a file. + + :param int dms_file_id: dms_file_id + :param Optional[str] access_token: access_token + + :return: response + :rtype: odoo.http.Response + """ + ensure_db() + res = self._dms_check_access("dms.file", dms_file_id, access_token) + if not res: + if access_token: + return request.redirect("/") + return request.redirect("/my") + + if res.attachment_id and request.env.user.has_group("base.group_portal"): + res = res.sudo() + file_content = base64.b64decode(res.content) + content_type = ("Content-Type", "application/octet-stream") + disposition_content = ( + "Content-Disposition", + content_disposition(res.name), + ) + return request.make_response(file_content, [content_type, disposition_content]) diff --git a/dms/data/onboarding_data.xml b/dms/data/onboarding_data.xml new file mode 100644 index 00000000..9533f6ad --- /dev/null +++ b/dms/data/onboarding_data.xml @@ -0,0 +1,76 @@ + + + + + + Storage + Create a new Document Storage. + Create Storage + Document Storage Created! + action_open_documents_onboarding_storage + + onboarding_default.png + Onboarding Storage + 1 + + + + Directory + Create a new Root Directory. + Create Directory + Root Directory Created! + action_open_documents_onboarding_directory + + onboarding_default.png + Onboarding Directory + 2 + + + + File + Upload your first File. + Upload File + First File Uploaded! + action_open_documents_onboarding_file + + onboarding_default.png + Onboarding File + 3 + + + + + File Onboarding + + document_onboarding_file + action_close_panel_dms_file + + diff --git a/dms/demo/access_group.xml b/dms/demo/access_group.xml new file mode 100644 index 00000000..136445b3 --- /dev/null +++ b/dms/demo/access_group.xml @@ -0,0 +1,18 @@ + + + + Admin + True + True + True + + + + Portal + + + + User + + + diff --git a/dms/demo/category.xml b/dms/demo/category.xml new file mode 100644 index 00000000..b6d16811 --- /dev/null +++ b/dms/demo/category.xml @@ -0,0 +1,31 @@ + + + + + Internal + + + Human Resource + + + + Contracts + + + + Traveling + + + + External + + + News + + + diff --git a/dms/demo/directory.xml b/dms/demo/directory.xml new file mode 100644 index 00000000..5d97396a --- /dev/null +++ b/dms/demo/directory.xml @@ -0,0 +1,147 @@ + + + + + Documents + + + + + + + + + + Media + + + + + + + + + Sheets + + + + + + + Templates + + + + + + + + Photos + + + + + + + + 2017 + + + + + + + 2018 + + + + + + + Videos + + + + + + Music + + + + + + Graphics + + + + + Mails + + + + + + + + + Data + + + + + + + Code + + + + + + + Slides + + + + + + Partners + + + + + + res.partner + + diff --git a/dms/demo/file.xml b/dms/demo/file.xml new file mode 100644 index 00000000..29c91d7a --- /dev/null +++ b/dms/demo/file.xml @@ -0,0 +1,241 @@ + + + + + Sydney.jpg + + + + + + + Logo_01.jpg + + + + + + Logo_02.jpg + + + + + + + Logo_03.jpg + + + + + + Logo.svg + + + + + + + Loop_01.wav + + + + + + + Loop_02.wav + + + + + + + Loop_03.mp3 + + + + + + + Loop_04.mp3 + + + + + + + Video.mp4 + + + + + + + Mail_01.eml + + + + + + + Mail_02.eml + + + + + + Text.txt + + + + + + ASPECTJ.aj + + + + + + Bash.sh + + + + + C.c + + + + + Cplusplus.cc + + + + + CSharp.cs + + + + + COBOL.cbl + + + + + CoffeeScript.coffee + + + + + Fortran.f + + + + + Go.go + + + + + Groovy.groovy + + + + + Java.java + + + + + Scala.sc + + + + + Sample.md + + + + + Document_05.pdf + + + + + + Slide_01.odp + + + + + Slide_02.ppt + + + + + Document_02.doc + + + + + + Document_03.odt + + + + + + Sheet_01.xls + + + + + + Sheet_02.csv + + + + + + Sheet_03.ods + + + + + + Document_04.rtf + + + + + + Text.rst + + + + + diff --git a/dms/demo/res_users.xml b/dms/demo/res_users.xml new file mode 100644 index 00000000..ca02b6a9 --- /dev/null +++ b/dms/demo/res_users.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/dms/demo/storage.xml b/dms/demo/storage.xml new file mode 100644 index 00000000..2af75449 --- /dev/null +++ b/dms/demo/storage.xml @@ -0,0 +1,20 @@ + + + + + Documents Storage + database + + + Attachment Storage + attachment + + + + + diff --git a/dms/demo/tag.xml b/dms/demo/tag.xml new file mode 100644 index 00000000..69d6d178 --- /dev/null +++ b/dms/demo/tag.xml @@ -0,0 +1,64 @@ + + + + + Customer + 1 + + + + Partner + 2 + + + + Project + 3 + + + + Sales + 4 + + + + Portal + 5 + + + + Apps + 6 + + + + Accounting + 7 + + + + Customer Invoice + 8 + + + + Vendor Bill + 9 + + + + Product + 10 + + + + Contract + 11 + + + diff --git a/dms/i18n/de.po b/dms/i18n/de.po new file mode 100644 index 00000000..09e98900 --- /dev/null +++ b/dms/i18n/de.po @@ -0,0 +1,2308 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-18 11:18+0000\n" +"PO-Revision-Date: 2023-09-18 11:18+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: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Legen Sie fest, wie ankommende E-Mails behandelt werden:\n" +"\n" +" - Einzelne Dateien: Die E-Mail wird im Verzeichnis " +"gespeichert und\n" +" alle Anhänge werden als Dateien gespeichert.\n" +"\n" +" - Unterverzeichnis: Für jede E-Mail wird ein neues " +"Unterverzeichnis erstellt\n" +" und die E-Mail in dieses gespeichert. Die Anhänge\n" +" werden als Dateien in diesem Unterverzeichnis gespeichert.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Dateien" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Unterverzeichnisse" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Dokumente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Ein Python-Dictionary, das ausgewertet wird, um beim Erstellen neuer " +"Datensätze für diesen Alias Standardwerte bereitzustellen." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Ein Stammverzeichnis kann kein Oberverzeichnis besitzen." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Ein Verzeichnis benötigt ein Oberverzeichnis." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" +"Ein Verzeichnis benötigt ein Datenmodell, wenn Anhänge als Speicherort " +"gewählt wurde." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Es existiert bereits ein Verzeichnis mit diesem Namen." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" +"Eine Datei benötigt ein Datenmodell und eine Resource-ID, wenn Anhänge als " +"Speicherort gewählt wurde." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Ein Stammverzeichnis benötigt einen Speicherort." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Abstraktes DMS-Mixin" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Erlaube E-Mails von" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Zugriffsgruppen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Zugriffsinformationen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Zugriffswarnung" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Abrechnung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Aktion nötig" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Aktiv" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Aktivitäten" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Aktivitätsfehler-Dekoration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Aktivitätsstatus" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Aktivitätstyp-Icon" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Neues Verzeichnis hinzufügen." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Neue Datei hinzufügen." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Alias Kontakt Sicherheit" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Alias-Bezeichnung" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Alias-Einstellung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Extraktion von Alias-Mails" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Alias-Modell" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Alle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Alle Dateien" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Während des Uploads ist ein Fehler aufgetreten" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Anwendungen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Archiviert" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Archivierte Dateien" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Dateianhang" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Anzahl der Anhänge" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Anhangsdatei" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Basis" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Abbrechen" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Kategorien" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Kategorien werden genutzt, um Dokumente zu ordnen." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Kategorie" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "Es existiert bereits eine Kategorie mit diesem Namen!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Prüfsumme / SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Unterkategorien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Untergruppen" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Klicken, um ein neues Verzeichnis anzulegen." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Klicken, um eine Datei hinzuzufügen." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Klicken, um ein Stichwort hinzuzufügen." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Geschlossen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Farbe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Farbindex" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Unternehmen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Unternehmen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Vollständige Gruppen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Vollständige Bezeichnung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Vollständige Verzeichnisse" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationseinstellungen" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Konfiguration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Inhalt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Binary-Inhalt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Datei-Inhalt" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Vertrag" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Verträge" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Anzahl der Verzeichnisse" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Anzahl der Elemente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Anzahl der Dateien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Anzahl Titel Dateien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Anzahl der Unterkategorien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Anzahl der Unterverzeichnisse" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Anzahl Titel Unterverzeichnisse" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Anzahl der Stichwörter" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Anzahl der Benutzer" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Anlegen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Anlageberechtigung" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Verzeichnis anlegen" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Speicherort anlegen" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Neue Kategorie anlegen." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Neuen Speicherort anlegen." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Neues Stammverzeichnis anlegen." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Neues Speicherort-Objekt anlegen." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Dateien von Nachrichtenanhängen anlegen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Erstelldatum" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Aktueller Speichertyp" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Benutzerdefinierte Bounce-Nachricht" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Kunde" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Kundenrechnung" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "Portal-URL des Kunden" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "DMS-Sicherheit-Mixin" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "DMS-Miniaturansicht und Symbol-Mixin" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Datenbank" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Standardwerte" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Verbotene Dateiendungen festlegen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "Legt eine Liste von verbotenen Dateiendungen fest (z.B. 'exe', 'msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" +"Legt die maximale Uploadgröße einer Datei in MB fest. (Standardwert: 25MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Löschberechtigung" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Verzeichnisse" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Mithilfe von Verzeichnissen können Dateien direkt in Odoo\n" +" organisiert und strukturiert werden." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Verzeichnis" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Dokumentenkategorie" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Dokumenten-Stichwort" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Dokumente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Dokumente Onboarding-Verzeichnis Status" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Dokumente Onboarding-Dateistatus" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Dokumente Onboarding-Status" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Dokumente Onboarding Speicherstatus" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Erledigt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Elemente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "E-Mail-Alias" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "E-Mail Thread" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Fehler! Kategorien können nicht rekursiv angelegt werden." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Fehler! Verzeichnisse können nicht rekursiv angelegt werden." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Explizite Benutzer" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Dateiendung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Dateiendungen" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Extern" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Datei" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Datei-Upload" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Dateien" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Dateien werden genutzt, um Inhalte direkt in Odoo zu speichern." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Dateiablage" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Abonnenten" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnenten (Partner)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "\"Font awesome\" Icon (z.B. fa-tasks)" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Gruppe" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Gruppieren nach" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Gruppenname" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Gruppen-Benutzer" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Gruppen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Hat Nachricht" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Personalwesen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID des übergeordneten Datensatzes, der den Alias enthält (Beispiel: Projekt, " +"das den Alias für die Aufgabenerstellung enthält)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "Icon-URL" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Symbol zur Kennzeichnung einer Ausnahmeaktivität." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Wenn eine Datei auf archiviert gesetzt ist, wird sie nicht angezeigt, ist " +"aber weiterhin vorhanden." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Falls markiert, benötigen neue Nachrichten Ihre Aufmerksamkeit." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" +"Wenn diese Überprüfung aktiviert ist, weisen einige Nachrichten einen " +"Übermittlungsfehler auf." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Wenn diese Option festgelegt ist, sind Verzeichnisse und Dateien nur für das " +"ausgewählte Unternehmen verfügbar." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Wenn diese Option festgelegt ist, wird dieser Inhalt anstelle der " +"Standardnachricht automatisch an nicht autorisierte Benutzer gesendet." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Bild" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Bild 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Bild 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Bild 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Bild 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Geben Sie an, ob Verzeichnisse und Dateien auch im E-Mail-" +"Kompositionsprozess automatisch erstellt werden" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Gibt an, ob Verzeichnisse und Dateien standardmäßig ausgeblendet sind." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Gibt an, ob es sich bei dem Verzeichnis um ein Stammverzeichnis handelt.\n" +" Ein Stammverzeichnis hat ein Einstellungsobjekt, während ein " +"Verzeichnis mit einem gesetzten\n" +" Oberverzeichnis die Einstellungen von seinem übergeordneten Element " +"erbt." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Erbe Gruppen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Erbe Berechtigungen vom verlinkten Objekt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Erbe Anlageberechtigung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Erbe Löschberechtigung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Erbe Schreibberechtigung" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Intern" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Interne / Personal-Ressource" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Ungültige Anhänge!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Rechnungen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "Ist ein Abonnent" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "Ist ein Stammverzeichnis" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Es ist nicht möglich, den Speicherort zu ändern." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Gerade erledigt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Letzte Aktualisierung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Verlinkte Datenmodelle" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Verlinktes Anhangsmodell" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "ID des verknüpften Anhangs-Datensatzes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Sperren" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Gesperrt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Gesperrt von" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Manuelle Datei-Migration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Nachrichtenübertragungsfehler" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Nachrichten" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Meta-Daten" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrieren" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Dateien migrieren" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Migrationsstatus" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modell" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Änderungsdatum" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Meine Aktivitätsfrist" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Meine Verzeichnisse" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Meine Dokumente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Meine Dateien" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Neues Stammverzeichnis" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Neuer Speicherort" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Neuigkeiten" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Frist der nächsten Aktivität" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Zusammenfassung der nächsten Aktivität" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Typ der nächsten Aktivität" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Es wurde kein zur Verfügung gestellt" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Nicht fertig" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Keine Ergebnisse" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Anzahl der Aktionen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Anzahl der Fehler" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Anzahl der Meldungen, die Maßnahmen erfordern" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Anzahl der Nachrichten mit Übertragungsfehler" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Diese Aktion kann nur von einem Manager durchgeführt werden." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"Optionale ID eines Threads (Datensatzes), an den alle eingehenden " +"Nachrichten angehängt werden, auch wenn darauf nicht geantwortet wurde. Ist " +"diese Option gesetzt, wird die Erstellung neuer Datensätze vollständig " +"deaktiviert." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organisation" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Oberkategorie" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Oberverzeichnis" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Obergruppe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Obermodell" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Elternpfad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "Thread-ID des übergeordneten Datensatzes" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "Die übergeordnete Gruppe '%(parent)s' ist ein Kind von '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Übergeordnetes Modell, das den Alias enthält. Das Modell, das den Alias-" +"Referenzwert enthält, ist nicht notwendigerweise das durch alias_model_id " +"angegebene Modell (Beispiel: Projekt (parent_model) und Aufgabe (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Json-Pfad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Pfadnamen" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Richtlinie zum Veröffentlichen einer Nachricht auf dem Dokument über das " +"Mailgateway.\n" +"- Jeder: jeder kann posten\n" +"- Partner: nur authentifizierte Partner\n" +"- Abonnenten: nur Abonnenten des entsprechenden Dokuments oder Mitglieder " +"der folgenden Kanäle\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL für Portalzugriff" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Vorschau" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Produkt" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Projekt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Leseberechtigung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Zugriffsgruppen des Datensatzes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Referenzierter Datensatz" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "Thread-ID des Datensatzes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Migration benötigt" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Verantwortlicher Benutzer" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Stammverzeichnisse" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Verkäufe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Speichertyp" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Scannen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Sicherheitstoken" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Einstellungen" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Teilen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Speicherorte anzeigen" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Einzelne Dateien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Größe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Sternchen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Verzeichnisse mit Sternchen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Sterne" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Status basierend auf Aktivitäten\n" +"Überfällig: Fälligkeitsdatum ist bereits überschritten\n" +"Heute: Aktivitätsdatum ist heute\n" +"Geplant: Zukünftige Aktivitäten." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Speicherort" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Speicherort ist verborgen" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Speicherorte" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Speicherorte werden verwendet, um Dokumente zu konfigurieren." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Unterkategorien" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Unterverzeichnisse" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Unterverzeichnis" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Stichwort" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Es existiert bereits ein Stichwort mit diesem Namen!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Stichwörter" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Stichwörter werden genutzt, um Dokumente zu kategorisieren." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Stichwörter..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Technische Informationen" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "" +"Das Aktiv-Feld ermöglicht es Ihnen, die Kategorie auszublenden, ohne sie zu " +"entfernen." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" +"Das Aktiv-Feld ermöglicht es Ihnen, das Stichwort auszublenden, ohne es zu " +"entfernen." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "Der Name des Verzeichnisses ist ungültig." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "Dies ist ein verbotener Dateityp." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "Der Name der Datei ist ungültig." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "Die maximale Upload-Größe beträgt %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"Das Modell (Odoo Document Kind), dem dieser Alias entspricht. Jede " +"eingehende E-Mail, die nicht auf einen bestehenden Datensatz antwortet, " +"führt zur Erstellung eines neuen Datensatzes dieses Modells (z. B. einer " +"Projektaufgabe)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"Der Name des E-Mail-Alias, z. B. \"jobs\", wenn Sie E-Mails für " +" abfangen möchten." + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "Der Gruppenname muss eindeutig sein!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Dieses Verzeichnis muss einem Datensatz zugeordnet werden." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Gesamtanzahl der Elemente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Gesamtanzahl der Dateien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Gesamtanzahl der Unterverzeichnisse" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Reisen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Typ" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Art der Ausnahmeaktivität des Datensatzes." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Löschberechtigung" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Entsperren" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "E-Mail entpacken als" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Hochladen" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Datei hochladen" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Erste Datei hochladen." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Benutzer" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Benutzer" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Lieferantenrechnung" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Website-Nachrichten" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Historie der Website-Kommunikation" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Schreibberechtigung" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Sie müssen zuerst ein Verzeichnis auswählen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "Element(e)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe, msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" + +#~ msgid "Actions" +#~ msgstr "Aktionen" + +#~ msgid "Views" +#~ msgstr "Ansichten" diff --git a/dms/i18n/dms.pot b/dms/i18n/dms.pot new file mode 100644 index 00000000..12f02752 --- /dev/null +++ b/dms/i18n/dms.pot @@ -0,0 +1,2227 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +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: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each email\n" +" and the mail is attached to this subdirectory. The attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those of the folder that contains it, therefore, it is possible that when you change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task" +" creation alias)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access" +" (for example, if some directories are related with any sale, only users " +"with read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process " +"too" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a set\n" +" parent inherits the settings form its parent." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not" +" necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following channels\n" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming" +" email that does not reply to an existing record will cause the creation of " +"a new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you" +" change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" diff --git a/dms/i18n/es.po b/dms/i18n/es.po new file mode 100644 index 00000000..d2c7ee3e --- /dev/null +++ b/dms/i18n/es.po @@ -0,0 +1,2312 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-20 08:48+0000\n" +"PO-Revision-Date: 2024-05-20 10:49+0200\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 3.0.1\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Defina cómo se procesan los correos electrónicos entrantes:\n" +"\n" +" - Archivos individuales: el correo electrónico se adjunta a " +"la carpeta y\n" +" todos los adjuntos se crean como archivos.\n" +"\n" +" - Subcarpeta: se crea una nueva subcarpeta para cada correo " +"electrónico\n" +" y el correo se adjunta a esta subcarpeta. Los adjuntos\n" +" se crean como archivos de la subcarpeta.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Archivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Subcarpetas" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" +"\n" +" ATENCIÓN: Consejos a tener en cuenta antes de " +"mover los archivos:
\n" +" - Este cambio no se puede deshacer.
\n" +" - Recuerda que los permisos de los archivos son los del " +"directorio que lo contiene, por lo tanto, es posible que al cambiarlo, los " +"permisos también cambien.
\n" +" Haz este cambio bajo tu responsabilidad." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Un diccionario de Python que se evaluará para proporcionar valores " +"predeterminados al crear nuevos registros para este alias." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Una carpeta no puede ser raíz y tener una carpeta padre." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Una carpeta debe tener una carpeta padre." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" +"Un directorio debe tener un modelo en el almacenamiento de archivos adjuntos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Una carpeta con el mismo nombre ya existe." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" +"Un archivo debe tener un ID de modelo y recurso en el almacenamiento de " +"archivos adjuntos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Un directorio root debe tener un almacenamiento." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Mezcla Dms abstracta" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Aceptar emails de" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Grupos de acceso" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Información de acceso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Aviso de acceso" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Contabilidad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Acción necesaria" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Activo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Actividades" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoración de excepción de actividad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Estado de actividad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icono para el tipo de actividad" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Añadir un nuevo archivo." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Añadir un nuevo archivo." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Admin" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Seguridad de contacto de alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Nombre del alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Opción de alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Extracción de alias de correo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Modelo con alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Todo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Todos los archivos" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Se ha producido un error durante la carga" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Aplicaciones" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Archivado" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Archivos archivados" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "¿Estás seguro? Todos los archivos se moverán." + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Adjunto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Nº de adjuntos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Archivo adjunto" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Base/Fuente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Categorías" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Las categorías son usadas para categorizar documentos." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Categoría" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "¡El nombre de la categoría ya existe!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Verificación de suma/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Categorías hijas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Grupos hijos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Click para añadir una nueva carpeta." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Click para añadir un nuevo archivo." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Click para crear una nueva etiqueta." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Cerrado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Color" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Índice de color" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Compañía" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Grupos completos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Nombre completo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Directorios completos" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Configuración" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Contenido" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Contenido binario" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Contenido de archivo" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Contrato" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Contratos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Nº de carpetas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Nº de elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Nº de archivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Título de los archivos de recuento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Nº de subcategorías" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Nº de subcarpetas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Título de las carpetas de recuento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Nº de etiquetas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Conteo de usuarios" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Crear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Acceso de creación" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Crear carpeta" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Crear almacenamiento" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Crear una nueva categoría." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Crear un nuevo documento de almacenamiento." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Crear una nueva carpeta raíz." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Crear un nuevo objeto de almacenamiento." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Crear archivos a partir de archivos adjuntos de mensajes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Fecha de creación" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Tipo de guardado actual" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Mensaje de rebote personalizado" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Cliente" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Factura de cliente" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL del portal del cliente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "Carpetas" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mezcla de seguridad DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "Mezcla de iconos y miniaturas de DMS" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Base de datos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Valores por defecto" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Define extensiones de archivo prohibidos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" +"Define una lista de extensiones de archivo prohibidas. (Ejemplo: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Define el tamaño máximo de carga en MB. Por defecto (25 MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Acceso de eliminación" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Carpetas" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Las carpetas se pueden utilizar para estructurar y organizar\n" +" archivos directamente en Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Carpeta" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Categoría del documento" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Etiqueta del documento" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Estado del directorio de incorporación de documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Estado de archivo de incorporación de documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Estado de incorporación de documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Estado de almacenamiento de incorporación de documentos" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Hecho" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Editor" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Alias de email" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Hilo de correo electrónico" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "¡Error! No puedes crear categorías recursivas." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "¡Error! No puedes crear carpetas recursivas." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Usuarios explícitos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Extensión" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Extensiones" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Externo" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Archivo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Archivo subido" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Archivos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Los archivos se usan para guardar el contenido directamente en Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Almacenamiento" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Contactos)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icono de fuente impresionante, por ejemplo fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Opciones generales" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Grupo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Nombre del grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Usuarios del grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Grupos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Tiene mensaje" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Recursos humanos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID del registro principal que contiene el alias (ejemplo: proyecto que " +"contiene el alias de creación de la tarea)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Icono" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "URL del icono" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icono para indicar una actividad de excepción." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Si un archivo está definido como archivado, no se mostrará, pero todavía " +"existe." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si está marcado los nuevos mensajes requieren su atención." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcado algunos mensajes tienen error de entrega." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Si se configura, las carpetas y archivos solo estarán disponibles para la " +"empresa seleccionada." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Si se establece, este contenido se enviará automáticamente a usuarios no " +"autorizados en lugar del mensaje predeterminado." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Imagen" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Imagen 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Imagen 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Imagen 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Imagen 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Indique si los directorios y los archivos también se crean automáticamente " +"en el proceso de composición del correo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" +"Indica si las carpetas y archivos están ocultos de forma predeterminada." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Indica si la carpeta es una carpeta raíz.\n" +" Una carpeta raíz tiene un objeto de configuración, mientras que una " +"carpeta con un\n" +" padre hereda la configuración de su padre." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Grupos heredados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Heredar permisos del registro relacionado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Crear acceso heredado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Acceso no enlazado heredado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Acceso de escritura heredado" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Interno" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Interno / Recursos humanos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "¡Archivos adjuntos no válidos!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Facturas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "Es seguidor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "Es carpeta raíz" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "No es posible cambiar el almacenamiento." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Justo ahora" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Última actualización" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Modelos vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Modelo de adjuntos vinculado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "ID de registro de archivos adjuntos vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Bloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Bloqueado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Bloqueado por" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Responsable" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migración de archivo manual" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Error de entrega de mensaje" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Información meta" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrar" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" +"Migrar archivo %(index)s of %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migrar archivos" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migración" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Estado de migración" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modelo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "Mover" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "Mover archivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Fecha límite de mi actividad" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Mis directorios" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Mis documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Mis archivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Nombre" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Nuevo directorio raíz" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Nuevo almacenamiento" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Novedades" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Fecha fin siguiente actividad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Resumen de siguiente actividad" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo de siguiente actividad" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "No se proporcionó ningún anexo" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "No hecho" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Sin resultados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de acciones" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Número de error" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensajes que requieren una acción" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error de entrega" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "Solo los archivos con la misma carpeta raíz se pueden mover." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Solo los responsables pueden ejecutar esta acción." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"ID opcional de un hilo (registro) al que se adjuntarán todos los mensajes " +"entrantes, incluso si no respondieron. Si se establece, esto deshabilitará " +"la creación de nuevos registros por completo." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organizar" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Propietario" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Categoría padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Carpeta padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Grupo padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Modelo padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "Ruta padre" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "El grupo parental 'l%(parent)s' es hijo de '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Modelo principal que tiene el alias. El modelo que contiene la referencia de " +"alias no es necesariamente el modelo dado por alias_model_id (ejemplo: " +"proyecto (parent_model) y tarea (modelo))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Contacto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Ruta Json" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Nombres de ruta" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Política para publicar un mensaje en el documento mediante el mailgateway.\n" +"- todos: todos pueden publicar\n" +"- socios: solo socios autenticados\n" +"- seguidores: solo seguidores del documento relacionado o miembros de los " +"siguientes canales\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Portal" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL de acceso al portal" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Vista Anticipada" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Producto" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Proyecto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Acceso de lectura" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Grupos de acceso de registro" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Registro referenciado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "ID de hilo de registro" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Requiere migración" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Usuario responsable" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Carpetas raíz" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "Directorio Raíz" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Ventas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Tipo guardado" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Escanear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Token de seguridad" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Opciones" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Compartir" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Mostrar almacenamientos" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Archivos individuales" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Tamaño" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Destacado" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Carpetas destacadas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Estrellas" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Estado basado en actividades\n" +"Vencido: la fecha de vencimiento ya pasó\n" +"Hoy: la fecha de actividad es hoy\n" +"Planificado: actividades futuras." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Almacenamiento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Almacenamiento está oculto" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Almacenamientos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Los almacenamientos se utilizan para configurar sus documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Subcarpetas" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Subcarpetas" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Subcarpeta" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Sistema" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Etiqueta" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "¡El nombre de la etiqueta ya existe!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Etiquetas" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Las etiquetas se usan para categorizar documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Etiquetas..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Información técnica" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "El campo activo le permite ocultar la categoría sin eliminarla." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "El campo activo le permite ocultar la etiqueta sin quitarla." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "El nombre de la carpeta es inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "El archivo tiene una extensión prohibida." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "El nombre de archivo es inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "El tamaño máximo de subida es %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"El modelo (tipo de documento de Odoo) al que corresponde este alias. " +"Cualquier correo electrónico entrante que no responda a un registro " +"existente provocará la creación de un nuevo registro de este modelo (por " +"ejemplo, una tarea de proyecto)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"El nombre del alias de correo electrónico, p. Ej. 'trabajos' si desea " +"recibir correos electrónicos para " + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "¡El nombre del grupo debe ser único!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Este directorio necesita estar asociado a un registro." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Total elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Total archivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Total subcarpetas" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "Total archivos" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Viaje" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo de actividad de excepción registrada." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Acceso de eliminación" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Desbloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Desempaquetar correos electrónicos como" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Subir" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Archivo subido" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Sube tu primer archivo." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Usuario" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Usuarios" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Factura del proveedor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Mensajes del sitio web" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Histórico de mensajes del sitio web" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Acceso de escritura" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Debe selecciona una carpeta primero" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "elemento(s)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "mail.catchall.domain" + +#~ msgid "Actions" +#~ msgstr "Acciones" + +#~ msgid "Views" +#~ msgstr "Vistas" diff --git a/dms/i18n/fa.po b/dms/i18n/fa.po new file mode 100644 index 00000000..ed86d052 --- /dev/null +++ b/dms/i18n/fa.po @@ -0,0 +1,2339 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-08-28 16:06+0000\n" +"Last-Translator: Mostafa Barmshory \n" +"Language-Team: none\n" +"Language: fa\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 5.6.2\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" نحوه پردازش ایمیل های دریافتی را مشخص کنید:\n" +"پرونده‌های منفرد: ایمیل به دایرکتوری پیوست می‌شود و \n" +"تمامی پیوست‌ها به شکل پرونده‌ها ایجاد شده‌اند. \n" +"\n" +"ساب‌دایرکتوری: یک ساب‌دایرکتوری جدید برای هر ایمیل ایجاد شده است.\n" +"و ایمیل به این ساب‌دایرکتوری پیوست شده است. پیوست‌ها \n" +"به شکل پرونده‌های ساب‌دایرکتوری‌ها ایجاد شده‌اند.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "%s (رونوشت)" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s پرونده‌ها" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s ساب‌دایرکتوری‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" +"\n" +"بایگانی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" +"\n" +"بایگانی نشده" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" +"\n" +"دانلود" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" +"\n" +" توجه نکاتی که باید پیش از جابه‌جایی پرونده‌های در نظر داشته باشید: " +"
\n" +"نمی‌توانید این تغییر را لغو کنید.
\n" +"به یاد داشته باشید که مجوزهای پرونده‌ها تحت تاثیر مجوزهای پوشه‌هایی است که آن " +"پرونده‌ها در آن قرار دارند، بنابراین، اگر آنها را تغییر دهید، ممکن است مجوزها " +"نیز تغییر کنند.
\n" +"این تغییر را با مسئولیت خودتان انجام دهید." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" +"\n" +"باز کنید" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" +"\n" +"پرونده‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" +"\n" +"دایرکتوری‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" +"\n" +"قفل" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" +"\n" +"ویرایش" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" +"\n" +"پاک کردن" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" +"\n" +"قفل‌گشایی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +"@" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr " اقدامات
" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr " اسناد " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr " عملیات " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"یک فرهنگ لغت پایتون که ارزیابی می‌شود تا مقادیر پیش‌فرض هنگام ایجاد رکوردهای " +"جدید برای این نام مستعار ارائه کند." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "یک دایرکتوری نمی‌تواند خودش ریشه باشد و یک دایرکتوری والد دارد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "یک دایرکتوری باید حتما یک دایرکتوری والد داشته باشد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "یک دایرکتوری باید دارای مدل در ذخیره‌سازی پیوست باشد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "یک دایرکتوری با همین نام از قبل وجود دارد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "یک پرونده باید دارای مدل و شناسه منبع داده در محل ذخیره‌سازی باشد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "یک پرونده با نام مشابه از قبل در این دایرکتوری وجود دارد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "یک دایرکتوری ریسه باید یک محل ذخیره داشته باشد." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Misin انتزاعی سامانه مدیریت اسناد" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "ایمیل‌ها را از ... بپذیرید" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "گروه‌های دسترسی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "دسترسی به اطلاعات" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "هشدار دسترسی" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "حسابداری" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "اقدام لازم است" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "فعال" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "فعالیت‌ها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "نشانه‌گذاری بصری استثنا در فعالیت" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "وضعیت فعالیت" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "آیکون نوع فعالیت" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "یک دایرکتوری جدید اضافه کنید." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "یک پرونده جدید اضافه کنید." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "محتوای بیشتر اضافه کنید تا در ایمیل نشان داده شود" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "مدیر" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "نام مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "امنیت مخاطبان با نام مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "دامنه مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "نام دامنه مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "ایمیل مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "نام مستعار" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "تنظیمات مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "وضعیت نام مستعار" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "وضعیت نام مستعار بر اساس آخرین پیام دریافتی ارزیابی می‌شود." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "استخراج ایمیل نام مستعار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "مدل مستعار" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "همه" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "همه پرونده‌ها" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "یک خطا طی بارگذاری رخ داد" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "اپلیکیشن‌ها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "بایگانی شده" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "پرونده‌‎های بایگانی شده" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "آیا مطمئن هستید؟ همه فایل‌ها جابه‌جا خواهند شد." + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "پیوست" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "تعداد پیوست" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "پرونده پیوست" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "پایه" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "لغو کردن" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "دسته‌بندی‌ها" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "دسته‌بندی‌ها برای دسته‌بندی کردن اسناد به کار می‌روند." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "دسته‌بندی" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "نام این دسته‌بندی از قبل وجود داشت!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "کدکنترلی/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "دسته‌بندی‌های زیرشاخه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "گروه‌های زیرشاخه" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "برای افزودن یک دایرکتوری جدید، کلیک کنید." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "برای افزودن یک پرونده جدید کلیک کنید." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "برای ایجاد یک تگ جدید کلیک کنید." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "بسته شده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "رنگ" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "شاخص رنگ" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "شرکت‌ها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "شرکت" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "گروه‌ها را کامل کنید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "اسامی را تکمیل کنید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "دایرکتوری‌ها را تکمیل کنید" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "تنظیمات پیکربندی" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "پیکربندی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "محتوا" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "محتوای باینری" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "پرونده محتوا" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "قرارداد" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "قراردادها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "دایرکتوری‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "عناصر را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "پرونده‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "عنوان پرونده‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "زیرمجموعه‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "زیرمجموعه‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "عنوان زیرمجموعه‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "تگ‌ها را بشمارید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "کاربران را بشمارید" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "ایجاد کردن" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "دسترسی ایجاد کنید" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "دایرکتوری ایجاد کنید" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "فضای ذخیره سازی ایجاد کنید" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "یک دسته‌بندی جدید ایجاد کنید." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "یک محل ذخیره‌سازی جدید ایجاد کنید." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "یک دایرکتوری ریشه جدید ایجاد کنید." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "یک شیء ذخیره‌سازی جدید ایجاد کنید." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "از پیوست‌های پیام یک پرونده ایجاد کنید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "ایجاد شده بر" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "تاریخ ایجاد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "نوع ذخیره کنونی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "پیام برگشتی سفارشی" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "مشتری" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "فاکتور مشتری" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "نشانی اینترنتی پرتال مشتری" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "سامانه مدیریت اسناد" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mixin امنیت سامانه مدیریت اسناد" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "آیکون Mixin و تصویرکوچک سامانه مدیریت اسناد" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "پایگاه داده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "مقادیر پیش‌فرض" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "پسوندهای پرونده ممنوعه را تعریف کنید" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "حداکثر اندازه بارگذاری یک پرونده را به مگابایت تعریف کنید" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "یک فهرست از پسوندهای پرونده‌های ممنوعه را تعریف کنید. (مثال: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "حداکثر اندازه بارگذاری را به مگا بایت تعریف کنید. پیش‌فرض (25مگابایت)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "دسترسی را پاک کنید" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "دایرکتوری‌ها" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"می‌توانید از دایرکتوری‌ها برای ساختاربندی و سازمان‌دهی\n" +"پرونده‌ها در اودوو استفاده کنید." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "دایرکتوری" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "دسته‌بندی سند" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "محل ذخیره‌سازی سند ایجاد شد!" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "تگ سند" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "اسناد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "وضعیت ورود به سیستم فهرست اسناد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "وضعیت ورود به سیستم پرونده اسناد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "وضعیت ورود به سیستم اسناد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "وضعیت ورود به سیستم ذخیره‌سازی اسناد" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "انجام شده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "ویرایشگر" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "عناصر" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "نام مستعار ایمیل" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "رشته ایمیل" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "دامنه ایمیل برای مثال 'example.com' در 'odoo@example.com'" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "خطا! شما نمی‌توانید دسته‌های تودرتو ایجاد کنید." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "شما نمی‌توانید دایرکتوری‌های تودرتو ایجاد کنید." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "کاربران صریح" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "پسوند" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "پسوندها" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "خارجی" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "پرونده" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "پسوندهای پرونده" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "ورود به سامانه پرونده‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "اندازه پرونده" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "بارگذاری پرونده" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "مدل کمکی پرونده استریم برای کنترلگرها" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "پرونده‌ها" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "پرونده‌ها برای ذخیره دایرکتوری محتوا در اودوو استفاده می‌شوند." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "سیستم ذخیره‌سازی پرونده" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "اولین پرونده بارگذاری شد!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "دنبال کنندگان" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "دنبال کنندگان (شرکاء)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "آیکون font awesome مانند fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "تنظیمات عمومی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "گروه" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "گروه‌بندی توسط" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "نام گروه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "کاربران گروه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "گروه‌ها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "پیامی دارد" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "منابع انسانی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "شناسه" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"شناسه رکورد والد که دارای نام مستعار است (به عنوان مثال: پروژه‌ای که حاوی نام " +"مستعار ایجاد وظیفه است)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "آیکون" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "نشانی اینترنتی آیکون" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "آیکونی برای نمایش یک فعالیت اسنثنایی." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"اگر یک پرونده را تنظیم کردید تا بایگانی شود در آن صورت آن پرونده نشان داده " +"نمی‌شود ولی همچنان وجود دارد." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" +"تیک را بزنید تا در زمان دریافت پیام جدید سیستم به شما اعلام کند و شما آنها " +"را بررسی کنید." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "تیک را بزنید تا پیام خطای تحویل پیام‌ها برایتان بیاید." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "تنظیم کنید تا دایرکتوری‌ها و پرونده‌ها فقط در دسترس شرکت منتخب باشد." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"تنظیم کنید تا این محتوا به جای پیام پیش‌فرض برای کاربران غیرمجاز به صورت " +"خودکار ارسال شود." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "تصویر" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "تصویر 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "تصویر 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "تصویر 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "تصویر 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" +"مشخص کنید که آیا دسترسی به دایرکتوری‌ها و پرونده‌ها تنها با دسترسی به مدل‌های " +"مربوطه کار می‌کند (برای مثال، اگر برخی دایرکتوری‌ها به فروش خاصی مرتبط باشند، " +"تنها کاربرانی که به آن فروش دسترسی خواندنی دارند، می‌توانند به این " +"دایرکتوری‌ها دسترسی پیدا کنند)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"مشخص کنید آیا دایرکتوری‌ها و پرونده‌ها به صورت خودکار فرآیند ایجاد ایمیل را " +"نیز ایجاد کنند" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "مشخص کنید آیا دایرکتوری‌ها و پرونده‌ها به صورت پیش‌فرض مخفی باشند." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"مشخص کنید آیا دایرکتوری یک دایرکتوری ریشه است.\n" +"یک دایرکتوری ریشه دارای یک شیء تنظیمات است، در حالی که یک دایرکتوری‌ با یک " +"مجموعه\n" +"والد، تنظیمات را از والد خود به ارث می‌برد." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "گروه‌های وارث" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "از رکورد مربوطه مجوزها را به ارث ببرید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "دسترسی ایجاد به ارث برده شده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "دسترسی به حذف به ارث رسیده شده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "دسترسی نگارش به ارث رسیده شده" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "داخلی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "داخلی/منابع انسانی" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "پیوست‌ها نامعتبر!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "فاکتورها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "دنبال کننده است" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "دایرکتوری ریشه است" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "امکان تغییر محل ذخیره سازی وجود ندارد." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "امکان تغییر یک ذخیره سازی والد با یک ذخیره سازی دیگر وجود ندارد." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "به تازگی انجام شده است" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "آخرین بار توسط ... به روزرسانی شده است" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "آخرین بار در ... به روزرسانی شده است" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "آخرین به روزرسانی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "لینک/پیوند" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "مدل‌های پیوندشده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "مدل پیوست‌های پیوندشده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "شناسه سابقه پیوست‌های پیوندشده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "تشخیص ورودی مبتنی بر بخش محلی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "قفل" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "قفل شده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "قفل شده توسط" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "مدیر/رئیس" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "انتقال دستی پرونده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "خطای تحویل پیام" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "پیام‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "اطلاعات متا" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "انتقال داده‌ها" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "انتقال پرونده %(index)s از %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "پرونده‌ها را انتقال دهید" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "انتقال" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "وضعیت انتقال" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "مدل" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "تاریخ اصلاح" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "جابه‌جایی" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "پرونده‌ها را جابه‌جا کنید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "ضرب الاجل فعالیت من" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "دایرکتوری‌های من" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "اسناد من" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "پرونده‌های من" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "نام" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "دایرکتوری ریشه جدید" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "محل ذخیره سازی جدید" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "اخبار" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "ضرب الاجل فعالیت بعدی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "خلاصه فعالیت بعدی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "نوع فعالیت بعدی" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "هیچ پیوستی ارائه نشده است" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "انجام نشده است" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "بدون نتایج" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "یادداشت" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "تعداد اقدامات" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "تعداد خطاها" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "تعداد پیام‌هایی که نیازمند اقدام هستند" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "تعداد پیام های دارای خطای تحویل" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +#, fuzzy +msgid "Onboarding" +msgstr "فرآیند ورود و ادغام" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +#, fuzzy +msgid "Onboarding Directory" +msgstr "دایرکتوری ورود و ادغام" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "پرونده ورود و ادغام" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +#, fuzzy +msgid "Onboarding Step" +msgstr "مرحله ورود و ادغام" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "ذخیره‌سازی ورود و ادغام" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "فقط فایل‌های موجود در همان دایرکتوری ریشه می‌توانند جابجا شوند." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "فقط مدیران می‌توانند این عمل را اجرا کنند." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +#, fuzzy +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"شناسه اختیاری یک موضوع (رکورد) که به آن همه پیام‌های ورودی متصل خواهند شد، " +"حتی اگر به آن پاسخ ندهند. اگر این تنظیم فعال شود، ایجاد رکوردهای جدید کاملاً " +"غیرفعال خواهد شد." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "سازماندهی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "دسته والد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "دایرکتوری والد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "گروه والد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "مدل والد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "مسیر والد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "شناسه موضوع رکورد والد" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +#, fuzzy +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "%(parent)sگروه والد \" فرزند \"%(current)s\" است." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"مدل والد دارای نام مستعار. مدلی که مرجع نام مستعار را نگه می دارد لزوماً مدلی " +"نیست که توسط alias_model_id (مثال: پروژه (parent_model) و task (model) ارائه " +"شده است))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "شریک" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "مسیرJson" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "نام‌های مسیر" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"خط مشی ارسال پیام در سند با استفاده ازدرگاه پستی.\n" +"- همه: همه می توانند پست کنند\n" +"- شرکا: فقط شرکای تأیید شده\n" +"- دنبال کنندگان: فقط دنبال کنندگان سند مرتبط یا اعضای کانال های زیر\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "پورتال" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +#, fuzzy +msgid "Portal Access URL" +msgstr "URL دسترسی به پورتال" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "پیش نمایش" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "محصول" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "پروژه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +#, fuzzy +msgid "Read Access" +msgstr "دسترسی را بخوانید" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "گیرندگان" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "گروه‌های دسترسی به رکورد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "رکورد ارجاع داده شد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "شناسه رشته رکورد" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "سند مرتبط" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "شناسه سند مرتبط" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "مدل سند مرتبط" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +#, fuzzy +msgid "Require Migration" +msgstr "نیاز به انتقال" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "کاربر مسئول" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#, fuzzy +msgid "Root Directories" +msgstr "دایرکتوری‌های ریشه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "دایرکتوری ریشه" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "دایرکتوری ریشه ایجاد شد!" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "فروش" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "نوع ذخیره‌سازی" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "اسکن" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "رمز امنیتی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "تنظیمات" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +#, fuzzy +msgid "Share" +msgstr "اشتراک گذاری" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "نمایش ذخیره‌سازی‌ها" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "پرونده های تکی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "اندازه" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +#, fuzzy +msgid "Size (human readable)" +msgstr "اندازه (قابل خواندن توسط انسان)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "علامت‌گذاری شده با ستاره" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "دایرکتوری‌های علامت‌گذاری شده با ستاره" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "ستاره‌ها" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"وضعیت بر اساس فعالیت ها\n" +"سررسید: تاریخ سررسید گذشته است\n" +"امروز: تاریخ فعالیت امروز است\n" +"برنامه ریزی شده: فعالیت های آینده." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "ذخیره‌سازی" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "ذخیره سازی پنهان است" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "فضاهای ذخیره‌سازی" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "فضاهای ذخیره‌سازی برای پیکربندی اسناد شما استفاده می‌شوند." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "زیرگروه‌ها" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "زیرپوشه‌ها" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "زیرپوشه" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "سیستم" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "برچسب" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "نام برچسب قبلاً وجود دارد!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "برچسب ها" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "برچسب‌ها برای دسته‌بندی اسناد استفاده می‌شوند." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "برچسب ها..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "اطلاعات فنی" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "" +"فیلد فعال به شما این امکان را می‌دهد که دسته‌بندی را بدون حذف آن مخفی کنید." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "فیلد فعال به شما امکان می دهد برچسب را بدون حذف آن پنهان کنید." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "نام دایرکتوری نامعتبر است." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "پرونده دارای پسوند پرونده ممنوعه است." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "نام پرونده نامعتبر است." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "حداکثر اندازه آپلود %s مگابایت است." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"مدل (نوع سند در اودوو) که این آدرس معادل آن است. هر ایمیل ورودی که به رکورد " +"موجودی پاسخ ندهد، باعث ایجاد یک رکورد جدید از این مدل خواهد شد (برای مثال، " +"یک وظیفه پروژه)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"نام آدرس ایمیل معادل، مانند 'jobs' اگر می‌خواهید ایمیل‌ها را برای< " +"jobs@example.odoo.com > دریافت کنید" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "نام گروه باید منحصر به فرد باشد!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" +"نوع ذخیره برای تعیین نحوه ذخیره یک پرونده توسط سیستم استفاده می شود. اگر این " +"تنظیم را تغییر دهید، می‌توانید پرونده های موجود را به‌صورت دستی با راه‌اندازی " +"این عمل انتقال دهید." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "این دایرکتوری باید به یک رکورد مرتبط شود." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "تعداد کل عناصر" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "تعداد کل پرونده ها" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "تعداد کل زیرپوشه‌ها" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "تعداد کل پرونده ها" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "گردش" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "نوع" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "نوع فعالیت استثنایی روی رکورد." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "حذف پیوند دسترسی" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "باز کردن قفل" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "بازکردن ایمیل‌ها به عنوان" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "بارگذاری" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "بارگذاری پرونده" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "پرونده اول خود را بارگذاری کنید." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "کاربر" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "کاربران" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "فاکتور فروشنده" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "پیام‌های وب‌سایت" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "تاریخچه ارتباطات وب‌سایت" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "ویرایشگر جابجایی فایل‌های DMS" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "راهنمای به اشتراک‌گذاری رکوردهای سیستم مدیریت مستندات" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "دسترسی نوشتن" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "شما ابتدا باید یک دایرکتوری را انتخاب کنید" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "عناصر" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe،msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#, fuzzy +msgid "mail.catchall.domain" +msgstr "دامنه‌ای که ایمیل‌های بدون گیرنده خاص به آن ارسال می‌شود" + +#~ msgid "Actions" +#~ msgstr "اقدامات" + +#~ msgid "Views" +#~ msgstr "نماها" diff --git a/dms/i18n/fr.po b/dms/i18n/fr.po new file mode 100644 index 00000000..ecfa3ecb --- /dev/null +++ b/dms/i18n/fr.po @@ -0,0 +1,2343 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-24 07:07+0000\n" +"PO-Revision-Date: 2024-08-14 09:14+0000\n" +"Last-Translator: tva-subteno-it \n" +"Language-Team: none\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 5.6.2\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Définit de quelle manière les emails sont traités :\n" +"\n" +" - Simple fichier : Cet email se retrouve lié au dossier et\n" +" toutes les pièces jointes sont créées comme des fichiers.\n" +"\n" +" - Sous-dossier : Un nouveau sous-dossier est créé pour " +"chaque email\n" +" et le mail est attaché à ce sous-dossier. Les pièces " +"jointes\n" +" sont créées en tant que fichiers du sous-dossier.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "%s (copie)" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Fichiers" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Sous-dossiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" +"\n" +" Archiver" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" +"\n" +" Désarchiver" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" +"\n" +" Télécharger" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" +"\n" +" ATTENTION: Conseils à garder à l'esprit avant de " +"déplacer des fichiers :
\n" +" - Ce changement ne peut pas être annulé.
\n" +" - N'oubliez pas que les autorisations des fichiers sont " +"celles du dossier qui les contient, il est donc possible que lorsque vous " +"les modifiez, les autorisations changent également.
\n" +" Faites ce changement à vos risques et périls." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" +"\n" +" Ouvrir" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" +"\n" +" Fichiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" +"\n" +" Dossiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" +"\n" +" Verrouiller" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" +"\n" +" Modifier" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" +"\n" +" Supprimer" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" +"\n" +" Déverrouiller" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "Actions" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Documents" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "Opérations" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Un dictionnaire Python qui sera évalué pour fournir des valeurs par défaut " +"lors de la création de nouveaux enregistrements pour cet alias." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "" +"Un répertoire ne peut pas être un répertoire racine et avoir un répertoire " +"parent." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Un répertoire doit avoir un répertoire parent." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" +"Un répertoire doit avoir un modèle dans le stockage des pièces jointes." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Un répertoire du même nom existe déjà." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" +"Un fichier doit avoir un modèle et un ID de ressource dans le stockage des " +"pièces jointes." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "Un fichier du même nom existe déjà dans ce répertoire." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Un répertoire racine doit avoir un stockage." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Mixin abstraite pour DMS" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Accepter les e-mails de" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Accès par groupes" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Informations d'accès" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Avertissement d'accès" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Comptabilité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Action nécessaire" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Actif" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Activités" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Décoration d'activité d'exception" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "État de l'activité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icône du Type d'Activité" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Ajouter un nouveau dossier." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Ajouter un nouveau fichier." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "Ajouter plus d'informations à afficher dans le mail" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Administrateur" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Alias Contact Sécurité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "Alias de domaine" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "Alias domaine" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "Alias d'email" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Alias Nom" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Configuration d'Alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "Statut de l'alias" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "Statut de l'alias évalué sur le dernier message reçu." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Extraction-Alias-Email" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Modèle d'alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Tous" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Tous les fichiers" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Une erreur s'est produite pendant le téléchargement" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Applications" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Archivé" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Fichiers archivés" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "Êtes-vous sûr ? Tous les fichiers seront déplacés." + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Pièce jointe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Nombre de pièces jointes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Fichier joint" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Base" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Annuler" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Catégories" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Les catégories sont utilisées pour classer les documents." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Catégorie" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "Le nom de la catégorie existe déjà !" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Checksum/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Catégories Enfant" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Groupes Enfant" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Cliquez pour ajouter un nouveau répertoire." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Cliquez pour ajouter un nouveau fichier." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Cliquez pour ajouter une nouvelle étiquette." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Fermé" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Couleur" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Indice de couleur" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Société" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Groupes Complet" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Nom complet" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Dossiers complets" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Configuration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Contenu" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Contenu binaire" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Contenu du Fichier" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Contrat" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Contrats" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Nombre de dossiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Nombre d'éléments" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Nombre de fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Nombre de titre de fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Nombre de sous-catégories" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Nombre de sous-dossiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Nombre de titre de sous-dossiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Nombre d'étiquettes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Nombre d'utilisateurs" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Créer" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Autorisation de création" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Créer un répertoire" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Créer un stockage" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Créer une nouvelle catégorie." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Créer un nouveau stockage de documents." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Créer un nouveau répertoire racine." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Créez un nouvel objet de stockage." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Créer des fichiers à partir des pièces jointes des messages" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Date de création" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Type de sauvegarde actuel" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Message rejeté personnalisé" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Client" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Facture client" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL du portail client" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mixin de Sécurité DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "Mixin pour vignette et icône DMS" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Base de données" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Valeurs par défaut" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Définit les extensions de fichiers à exclure" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "Définit la taille maximale de téléchargement d'un fichier en Mo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "Définit les extensions de fichiers à exclure. (Exemple : 'exe, msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Définir la taille maximale de téléchargement en Mo. Par défaut (25Mo)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Accès Suppression" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Dossiers" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Les répertoires peuvent être utilisés pour structurer et organiser\n" +" les fichiers directement dans Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Dossier" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Catégorie du document" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "Stockage de documents créé !" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Étiquette du document" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Documents" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "État du parcours d'intégration des dossiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "État du parcours d'intégration des fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "État du Parcours d'intégration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "État du parcours d'intégration du stockage documents" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Terminé" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Éditeur" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Éléments" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Alias de messagerie" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Discussion par email" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "Domaine de messagerie par exemple 'example.com' dans 'odoo@exemple.com" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Erreur ! Vous ne pouvez pas créer de catégories récursives." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Erreur ! Vous ne pouvez pas créer de catégories récursives." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Utilisateurs explicites" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Extension" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Extensions" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Externe" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Fichier" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "Extensions de fichiers" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "Parcours d'intégration des fichiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "Taille du fichier" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Téléversement de fichiers" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "Modèle d'aide au contrôleur - Streaming de fichier" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Fichiers" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" +"Les fichiers sont utilisés pour enregistrer du contenu directement dans Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Stockage de fichiers" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "Premier fichier téléchargé !" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icône Font awesome ex : fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Réglages généraux" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Groupe" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Groupé par" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Nom du groupe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Utilisateurs du groupe" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Groupes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "A un message" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Ressource humaine" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID de l'enregistrement parent contenant l'alias (exemple : projet contenant " +"l'alias de création de la tâche)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Icône" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "URL de l'icône" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icône pour indiquer une activité d'exception." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Si un fichier est défini sur archivé, il n'est pas affiché, mais existe " +"toujours." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si coché, les nouveaux messages nécessitent votre attention." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si coché, certains messages ont une erreur de livraison." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"S'il est défini, les répertoires et les fichiers ne seront disponibles que " +"pour la société sélectionnée." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"S'il est défini, ce contenu sera automatiquement envoyé aux utilisateurs non " +"autorisés au lieu du message par défaut." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Image" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Image 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Image 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Image 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Image 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" +"Indiquez si l'accès aux répertoires et aux fichiers fonctionne uniquement " +"avec l'accès aux modèles associés (par exemple, si certains répertoires sont " +"liés à une vente, seuls les utilisateurs ayant un accès en lecture à ces " +"ventes peuvent y accéder)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Indique si les répertoires et les fichiers sont également créés " +"automatiquement dans le processus de composition du courrier" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Indique si les répertoires et les fichiers sont masqués par défaut." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Indique si le répertoire est un répertoire racine.\n" +" Un répertoire racine a des paramètres, tandis qu'un répertoire avec " +"un parent défini\n" +" hérite des paramètres de son parent." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Hériter des groupes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Hériter les autorisation de l'enregistrement associé" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Accès Création hérité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Accès Suppression hérité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Accès Écriture hérité" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Interne" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Interne / Ressource Humaine" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Pièces jointes non valides !" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Factures" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "Est abonné" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "Est un répertoire racine" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Il n'est pas possible de modifier le stockage." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" +"Il n'est pas possible de changer vers un parent avec un autre stockage." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Fait à l'instant" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Dernière mise à jour" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "Lien" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Modèles liés" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Modèle de pièces jointes liées" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "ID d'enregistrement des pièces jointes liées" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "Détection entrante basée sur la partie locale" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Verrouiller" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Verrouillé" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Verrouillé par" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Gestionnaire" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migration manuelle de fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Erreur de livraison du message" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Messages" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Métadonnées" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrer" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" +"Migration du fichier %(index)s de %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migrer les fichiers" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "État de la migration" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modèle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Date de modification" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "Déplacer" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "Déplacer les fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Date limite de mon activité" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Mes Dossiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Mes Documents" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Mes Fichiers" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Nom" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Nouveau répertoire racine" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Nouveau stockage" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Actualités" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Date limite de la prochaine activité" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Résumé de l'activité suivante" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Type d'activité suivante" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Aucune pièce jointe n'a été fournie" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Non terminé" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Aucun résultats" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "Note" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'actions" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Nombre d'erreurs" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Nombre de messages nécessitant une action" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Nombre de messages avec erreur de livraison" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "Parcours d'intégration" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "Parcours d'intégration des dossiers" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "Parcours d'intégration d'un fichier" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "Étape du parcours d'intégration" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "Parcours d'intégration pour le stockage" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "Seuls les fichiers du même répertoire racine peuvent être déplacés." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Seuls les gestionnaires peuvent exécuter cette action." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"ID facultatif d'un fil de discussion (enregistrement) auquel tous les " +"messages entrants seront attachés, même s'ils n'y ont pas répondu. S'il est " +"défini, cela désactivera complètement la création de nouveaux " +"enregistrements." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organiser" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Catégorie Parente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Dossier Parent" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Groupe Parent" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Modèle Parent" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Chemin Parent" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "ID de l'enregistrement du fil de discussion Parent" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "Le groupe parent '%(parent)s' est enfant de '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Modèle parent détenant l'alias. Le modèle contenant la référence d'alias " +"n'est pas nécessairement le modèle donné par alias_model_id (exemple : " +"projet (parent_model) et tâche (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Partenaire" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Chemin Json" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Noms des chemins" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Politique de publication d'un message sur le document à l'aide de la " +"passerelle de messagerie.\n" +"- tout le monde : tout le monde peut poster\n" +"- partenaires : uniquement des partenaires authentifiés\n" +"- abonnés (followers) : uniquement les abonnés du document concerné ou les " +"membres des canaux d'abonnement\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Portail" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL d'accès au portail" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Aperçu" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Produit" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Projet" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Accès en lecture" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "Destinataires" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Accès aux enregistrements des Groupes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Enregistrement référencé" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "ID de l'enregistrement du fil de discussion" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "Document lié" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "ID du document lié" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "Modèle du document lié" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Migration requise" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Utilisateur responsable" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Dossiers Racine" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "Répertoire Racine" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "Répertoire racine créé !" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Ventes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Type d'Enregistrement" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Scanner" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Jeton de Sécurité" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Réglages" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Partager" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Afficher les stockages" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Fichiers uniques" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Taille" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "Taille (lisible)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Favoris" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Dossiers Favoris" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Favoris" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Statut basé sur les activités\n" +"En retard : la date d'échéance est déjà dépassée\n" +"Aujourd'hui : la date de l'activité est aujourd'hui\n" +"Prévu : Activités futures." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Stockage" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Stockage est masqué" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Stockages" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Les stockages sont utilisés pour configurer vos documents." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Sous-catégories" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Sous-dossiers" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Sous-dossier" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Système" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Étiquette" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Le nom de l'étiquette existe déjà !" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Étiquettes" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Les étiquettes sont utilisées pour catégoriser les documents." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Étiquettes..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Informations techniques" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Le champ actif vous permet de masquer la catégorie sans la supprimer." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "Le champ actif vous permet de masquer l'étiquette sans la supprimer." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "Le nom du répertoire n'est pas valide." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "Le fichier a une extension de fichier interdite." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "Le nom du fichier n'est pas valide." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "La taille maximale de téléchargement est de %s Mo." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"Le modèle (Type de document Odoo) auquel cet alias correspond. Tout e-mail " +"entrant qui ne répond pas à un enregistrement existant entraînera la " +"création d'un nouvel enregistrement de ce modèle (par exemple, une tâche de " +"projet)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"Le nom de l'alias de messagerie, par ex. « jobs » si vous souhaitez recevoir " +"des e-mails pour " + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "Le nom du groupe doit être unique !" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" +"Le type de sauvegarde est utilisé pour déterminer comment un fichier est " +"sauvegardé par le système. Si vous modifiez ce paramètre, vous pouvez migrer " +"les fichiers existants en déclenchant l'action manuellement." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Ce répertoire doit être associé à un enregistrement." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Total d'éléments" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Total des fichiers" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Total des Sous-dossiers" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "Fichiers totaux" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Voyages" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Type" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Type de l'activité d'exception enregistrée." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Autorisation de suppression" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Déverrouiller" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Décompresser les e-mails en tant que" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Ajouter" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Ajouter un fichier" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Ajouter votre premier fichier." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Administrateur uniquement" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Utilisateurs" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Facture du fournisseur" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Messages du site Web" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Historique des communications du site Web" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "Wizard de déplacement de fichiers" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "Wizard pour partager des enregistrements" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Autorisation de modification" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Vous devez d'abord sélectionner un dossier" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "élément(s)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "mail.catchall.domain" + +#~ msgid "Actions" +#~ msgstr "Actions" + +#~ msgid "Views" +#~ msgstr "Vues" diff --git a/dms/i18n/he_IL.po b/dms/i18n/he_IL.po new file mode 100644 index 00000000..696520eb --- /dev/null +++ b/dms/i18n/he_IL.po @@ -0,0 +1,2264 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-11-10 18:08+0000\n" +"Last-Translator: Yves Goldberg \n" +"Language-Team: none\n" +"Language: he_IL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 3.10\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s קבצים" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"מילון פייתון שיוערך כדי לספק ערכי ברירת מחדל בעת יצירת רשומות חדשות לכינוי " +"זה." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "ספריה לא יכולה להיות ראשית אם יש לה ספריית אב." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "לספרייה צריכה להיות ספריה אב." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "כבר קיימת ספרייה עם אותו שם." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "קבל הודעות דוא\"ל מ" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "קבוצות גישה" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "הרשאות למידע" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "אזהרת גישה" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "נדרשת פעולה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "פעיל" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "פעילויות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "סימון פעילות חריגה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "מצב פעילות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "הוסף ספריה חדשה." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "הוסף קובץ חדש." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "כינוי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "כינוי אבטחת איש קשר" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "שם כינוי" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "הגדרת כינוי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "כינוי דואר-חילוץ" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "מודל בעל כינוי" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "הכל" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "כל הקבצים" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "בארכיון" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "קבצים בארכיון" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "כמות קבצים מצורפים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "בטל" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "קטגוריות" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "קטגוריות משמשות לסיווג מסמכים." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "קטגוריה" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "שם קטגוריה כבר קיים!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "תתי קטגוריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "קבוצת בן" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "לחץ כדי להוסיף ספריה חדשה." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "לחץ כדי להוסיף קובץ חדש." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "לחץ ליצירת תגית." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "סגור" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "צבע" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "אינדקס צבעים" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "חברות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "חברה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "קבוצות שלמות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "שם מלא" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "הגדרות תצורה" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "תצורה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "תוכן" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "תוכן הקובץ" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "ספירת ספריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "ספירת אלמנטים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "ספירת קבצים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "ספירת כותרות קבצים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "ספירת קטגוריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "ספירת תת-ספריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "ספירת כותרות תת-ספריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "ספירת תגיות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "צור" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "צור גישה" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "צור ספריה" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "צור מאגר" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "צור קטגוריה חדשה." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "צור מאגר מסמכים חדש." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "צור ספרייה ראשית חדשה." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "צור אובייקט אחסון חדש." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "נוצר על-ידי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "תאריך יצירה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "לקוח" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "כתובת פורטל לקוח" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "מסד נתונים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "ערכי ברירת מחדל" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "הגדר סיומות קבצים אסורות" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "מגדיר רשימה של סיומות קבצים אסורות. (דוגמה: 'exe, msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "מגדיר את גודל ההעלאה המרבי ב- MB. ברירת מחדל (25MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "מחק גישה" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "ספריות" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "ספריה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "שם תצוגה" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "קטגוריית מסמכים" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "תגית מסמך" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "מסמכים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "מדיניות ניהול שלבי ספריות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "מדיניות ניהול שלבי קבצים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "מדיניות ניהול שלבי מסמכים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "מדיניות ניהול שלבי ספריות" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "בוצע" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "עורך" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "אלמנטים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "כינוי דוא\"ל" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "שְׁגִיאָה! אינך יכול ליצור קטגוריות רקורסיביות." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "שְׁגִיאָה! אינך יכול ליצור ספריות רקורסיביות." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "משתמשים מפורשים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "סיומת" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "סוגי קבצים" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "קובץ" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "העלאת קובץ" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "קבצים" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "קבצים משמשים לשמירת תוכן ישירות בOdoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "מאגר" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "עוקבים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "עוקבים (לקוחות/ספקים)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "הגדרות כלליות" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "קבוצה" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "קבץ לפי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "שם הקבוצה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "קבוצות שלמות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "קבוצות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "מזהה" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"מזהה של רשומת האב המחזיקה בכינוי (דוגמה: פרויקט המחזיק בכינוי ליצירת המשימות)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "אייקון" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "סמל לציון פעילות חריגה." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "אם קובץ מוגדר לארכיון, הוא לא מוצג, אך עדיין קיים." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "אם מסומן, הודעות חדשות דורשות את תשומת לבך." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "אם מסומן, בחלק מההודעות קיימת שגיאת משלוח." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "אם מוגדר, ספריות וקבצים יהיו זמינים רק עבור החברה שנבחרה." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "מציין אם ספריות וקבצים מוסתרים כברירת מחדל." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "תורשת קבוצות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "פנימיים" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "משאבים פנימיים / אנושיים" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "חשבוניות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "עוקב" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "ספרייה ראשית" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "הרגע בוצע" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על-ידי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "עדכון אחרון ב" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "עדכון אחרון" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "נעל" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "נעול" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "מנהל" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "העברת קבצים ידנית" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "הודעת שגיאת משלוח" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "הודעות" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "מטא מידע" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "העברת קבצים" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "תאריך שינוי" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "הספריות שלי" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "הקבצים שלי" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "הקבצים שלי" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "שם" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "ספרייה ראשית חדשה" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "שטח אחסון חדש" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "מועד אחרון לפעילות הבאה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "תיאור הפעילות הבאה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "סוג הפעילות הבאה" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "לא בוצע" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "לא תוצאות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "מספר הפעולות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "מספר השגיאות" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "מספר הודעות עם שגיאת משלוח" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "רק מנהלים יכולים לבצע פעולה זו." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"מזהה אפשרי של שרשור (רשומה) שאליו יצורפו כל ההודעות הנכנסות, גם אם לא השיבו " +"אליו. אם מוגדר, הדבר יבטל את יצירת הרשומות החדשות לחלוטין." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "מארגן" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "קטגוריית אם" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "ספריית אב" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "קבוצת אב" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "מודל אב" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "נתיב אב" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "מזהה רשומת אשכול אב" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"מודל אב המחזיק בכינוי. המודל המחזיק במזהה לכינוי אינו בהכרח המודל שניתן על " +"ידי alias_model_id (דוגמה: project (parent_model) ומשימה (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"מדיניות פרסום הודעה על המסמך באמצעות שער הדואר.\n" +"- כולם: כולם יכולים לפרסם\n" +"- לקוחות/ספקים: רק לקוחות/ספקים מאומתים\n" +"- עוקבים: רק עוקבים של המסמך הקשור או חברים בערוצים הבאים\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "פורטל" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "כתובת גישה לפורטל" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "מוצר" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "פרויקט" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "גישה לקריאה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "שיא קבוצות גישה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "מזהה רשומת אשכול" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "משתמש אחראי" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "ספרייה ראשית" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "אסימון אבטחה" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "הגדרות" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "שתף" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "הצג מאגרים" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "קבצים בודדים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "גודל" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "מסומן בכוכב" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "ספריות מכוכבות" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "כוכביות" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"סטטוס על בסיס פעילויות\n" +"איחור: תאריך היעד כבר חלף\n" +"היום: תאריך הפעילות הוא היום\n" +"מתוכנן: פעילויות עתידיות." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "אחסון" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "האחסון מוסתר" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "מחסני" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "אחסנים משמשים לתצורת המסמכים שלך." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "תת קטגוריה" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "תת-ספריות" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "תת-ספרייה" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "תגית" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "שם התגית כבר קיים!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "תגיות" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "תגיות משמשים לסיווג מסמכים." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "תגיות..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "מידע טכני" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "השדה הפעיל מאפשר לך להסתיר את הקטגוריה מבלי להסיר אותה." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "השדה הפעיל מאפשר להסתיר את התגית מבלי להסיר אותה." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "שם הספרייה אינו חוקי." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "לקובץ סיומת קבצים אסורה." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "שם הקובץ אינו חוקי." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "גודל ההעלאה המקסימלי הוא %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"המודל (סוג מסמך Odoo) שאליו הכינוי הזה תואם. כל דוא\"ל נכנס שלא יענה לרשומה " +"קיימת יביא ליצירת רשומה חדשה של מודל זה (למשל משימת פרויקט)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"שם כינוי הדוא\"ל, למשל 'עבודות' אם ברצונך לקבל הודעות דוא\"ל ל " + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "שם הקבוצה חייב להיות ייחודי!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "סה\"כ אלמנטים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "סה\"כ קבצים" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "סה\"כ תת-ספריות" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "סוג" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "סוג פעילות חריגה ברשומה." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "בטל את קישור הגישה" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "שחרר נעילה" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "חלק הודעות דוא\"ל כ-" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "טען קובץ" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "טען את הקובץ הראשון שלך." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "משתמש" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "משתמשים" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "הודעות מאתר האינטרנט" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "היסטורית התקשרויות מאתר האינטרנט" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "גישה לכתיבה" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "תחילה עליך לבחור ספריה" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "אלמנט(ים)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" + +#~ msgid "Actions" +#~ msgstr "פעולות" + +#~ msgid "Views" +#~ msgstr "תצוגות" diff --git a/dms/i18n/it.po b/dms/i18n/it.po new file mode 100644 index 00000000..23e1273c --- /dev/null +++ b/dms/i18n/it.po @@ -0,0 +1,2339 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-06-21 13:27+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\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 5.10.4\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Definisci come sono elaborate le email in arrivo:\n" +"\n" +" - File singoli: l'email viene allegata alla directory e\n" +" tutti gli allegati sono creati come file.\n" +"\n" +" - Sottocategoria: viene creata una nuova sottocategoria per " +"ogni e-mail\n" +" e la posta è allegata a questa sottocategoria. Gli " +"allegati\n" +" sono creati come file della sottodirectory\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "%s (copia)" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Files" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Sottocategoria" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" +"\n" +" Archivia" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" +"\n" +" Riattiva" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" +"\n" +" Scarica" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" +"\n" +" ATTENZIONE: Cose da tenere presente prima di " +"muovere i file:
\n" +" - Questa modifica non può essere annullata.
\n" +" - Ricordarsi che i permessi dei file sono quelli della " +"cartella che li contiene, quindi, è possibile che quando viene modificata, " +"anche i permessi cambino.
\n" +" Eseguire queste modifiche a proprio rischio." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" +"\n" +" Apri" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" +"\n" +" File" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" +"\n" +" Cartelle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" +"\n" +" Blocca" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" +"\n" +" Modifica" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" +"\n" +" Elimina" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" +"\n" +" Sblocca" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" +"\n" +" &nbsp;" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" +"\n" +" &nbsp;" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "Cartelle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "File" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "Azioni" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Documenti" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "Operazioni" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "Viste" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Un dizionario Python che verrà valutato per fornire valori predefiniti " +"durante la creazione di nuovi record per questo alias." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Una cartella non può essere radice e avere una cartella genitore." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Una cartella deve avere una cartella genitore." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "Una cartella deve avere un modello nello storage allegati." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Esiste già una cartella con lo stesso nome." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "Un file deve avere un modello e un ID risorsa nello storage allegati." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "Esiste già un file con lo stesso nome in questa cartella." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Una cartella radice deve avere uno storage." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Mixin DMS astratto" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Accetta email da" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Gruppi di accesso" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Informazioni di accesso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Avviso accesso" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Contabilità" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Attiva" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Attività" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decorazione eccezione attività" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Stato attività" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icona tipo attività" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Aggiungi una nuova cartella." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Aggiungi un nuovo file." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "Aggiungi contenuto extra da visualizzare nella e-mail" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Amministratore" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Alias contatto sicurezza" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "Dominio alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "Nome dominio alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "E-mail alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Nome alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Impostazioni alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "Stato alias" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "Stato alias valutato sull'ultimo messaggio ricevuto." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Estrazione-Email-Alias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Modello con alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Tutte" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Tutti i file" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Si è verificato un errore durante il caricamento" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Applicazioni" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "In archivio" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "File archiviati" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "Si è sicuri? Tutti i file verranno spostati." + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Allegato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Conteggio allegati" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "File allegato" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Base" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Annulla" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Categorie" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Le categorie sono usate per classificare i documenti." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Categoria" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "Il nome della categoria esiste già!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Checksum/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Categorie figlie" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Gruppi figli" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Fare clic per aggiungere una nuova cartella." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Fare clic per aggiungere un nuovo file." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Fare clic per creare una nuova etichetta." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Chiuso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Colore" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Indice colore" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Azienda" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Gruppi completi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Cartelle complete" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Configurazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Contenuto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Contenuto binario" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Contenuto file" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Contratto" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Contratti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Conteggio cartelle" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Contggio elementi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Conteggio file" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Conteggio titoli dei file" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Contggio sotto categorie" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Conteggio sottocartelle" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Conteggio titoli delle sottocartelle" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Conteggio etichette" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Contggio utenti" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Crea" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Accesso in creazione" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Crea cartella" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Crea storage" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Crea una nuova categoria." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Crea un nuovo storage documenti." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Crea una nuova cartella radice." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Crea un nuovo oggetto storage." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Crea file dagli allegati dei messaggi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Data creazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Tipo di salvataggio corrente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Messaggio personalizzato per il rifiuto" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Cliente" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Fattura cliente" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL portale cliente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mixin sicurezza DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "Anteprima e icona mixin DMS" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Database" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Valori predefiniti" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Definire le estensioni di file vietate" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "Definire la dimensione massina di caricamento in MB" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" +"Definisce un elenco di estensioni di file vietate. (Esempio: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" +"Definisce la dimensione massima di caricamento in MB. Predefinita (25MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Cancella accesso" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Cartelle" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Le cartelle possono essere usate per strutturare e organizzare\n" +" i file direttamente su Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Cartella" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "Campo percorso DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Categoria documento" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "Archivio documento creato!" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Etichetta documento" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Documenti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Stato della cartella caricamento dei documenti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Stato del file caricamento dei documenti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Stato caricamento dei documenti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Stato strage caricamento documenti" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Eseguito" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Editor" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Elementi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Alias email" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Discussione e-mail" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "Dominio e-mail es 'example.com' in 'odoo@example.com'" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Errore! Non è possibile creare categorie ricorsive." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Errore! Non è possibile creare cartelle ricorsive." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Utenti espliciti" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Estensione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Estensioni" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Esterno" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "File" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "Estensioni file" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "Caricamento file" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "Dimensione file" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Carica file" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "Modello aiuto streaming file per controller" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "File" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" +"I file vengono utilizzati per salvare i contenuti direttamente in Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Filestore" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "Primo file caricato!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icona Font Awesome es. fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Impostazioni generali" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Gruppo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Nome gruppo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Utenti gruppo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Gruppi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Ha un messaggio" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Risorse umane" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID del record padre che contiene l'alias (esempio: progetto che contiene " +"l'alias di creazione dell'attività)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Icona" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "URL icona" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icona per indicare un'attività eccezione." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Se un file è impostato su archiviato, non viene visualizzato, ma esiste " +"ancora." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Se impostato, cartelle e file saranno disponibili solo per l'azienda " +"selezionata." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Se impostato, questo contenuto verrà inviato automaticamente agli utenti non " +"autorizzati invece del messaggio predefinito." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Immagine" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Immagine 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Immagine 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Immagine 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Immagine 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" +"Indica se l'accesso alle cartelle e ai file funziona solo con l'accesso al " +"modello correlato (ad esempio, se alcune cartelle sono collegate a un ordine " +"di vendita, solo gli utenti con accesso in lettura a questo ordine di " +"vendita possono accedervi)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Indica se le cartelle e i file vengono creati automaticamente anche nel " +"processo di composizione delle mail" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" +"Indica se le cartelle e i file sono nascosti per impostazione predefinita." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Indica se la cartella è una cartella radice.\n" +" Una cartella radice ha un oggetto impostazioni, mentre una cartella " +"con un\n" +" padre impostato eredita le impostazioni dal padre." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Eredita gruppi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Eredita le autorizzazioni dal record correlato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Accesso alla creazione ereditato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Accesso all'eliminazione ereditato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Accesso alla scrittura ereditato" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Interna" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Interno / Risorse umane" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Allegato non valido!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Fatture" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "Segue" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "È una cartella radice" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Non è possibile modificare lo storage." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "Non è possibile passare ad altro partner con un altro archivio." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Appena fatto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Ultimo aggiornamento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "Collegamento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Modelli collegati" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Modello degli allegati collegati" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "ID record degli allegati collegati" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "Rilevamento arrivo in base a parte-locale" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Blocco" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Bloccato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Bloccato da" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Supervisore" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migrazione manuale del file" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Informazioni metadati" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migra" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "Migra il file %(index)s di %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migra file" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migrazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Stato migrazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modello" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Data di modifica" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "Movimento" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "Sposta file" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Scadenza mia attività" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Le mie cartelle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "I miei documenti" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "I miei file" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Nome" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Nuova cartella radice" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Nuovo storage" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Novità" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Scadenza prossima attività" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Riepilogo prossima attività" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo prossima attività" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Non è stato fornito l'allegato" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Non completato" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Nessun risultato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "Nota" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "Caricamento" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "Cartella caricamento" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "File caricamento" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "Passo caricamento" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "Archivio caricamento" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "Solo i file nella stessa cartella radice possono essere spostati." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Solo i responsabili possono eseguire questa azione." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"ID facoltativo di un thread (record) a cui verranno allegati tutti i " +"messaggi in arrivo, anche se non hanno risposto. Se impostato, disabiliterà " +"completamente la creazione di nuovi record." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organizzazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Categoria padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Cartella padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Gruppo padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Modello padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Percorso padre" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "ID record thread padre" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "Il gruppo padre '%(parent)s' è figlio di '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Modello padre che detiene l'alias. Il modello che contiene il riferimento " +"alias non è necessariamente il modello fornito da alias_model_id (esempio: " +"progetto (parent_model) e task (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Partner" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Percorso Json" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Nomi percorso" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Politica per inviare un messaggio sul documento utilizzando il mailgateway.\n" +"- chiunque: chiunque può inviare\n" +"- clienti: solo i clienti autenticati\n" +"- chi segue: solo chi segue il documento collegato o i membri dei seguenti " +"canali\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Portale" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL accesso portale" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Anteprima" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "Anteprima record" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Prodotto" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Progetto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Accesso in lettura" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "Destinatari" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Gruppi di accesso al record" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Record referenziato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "ID thread record" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "Documento correlato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "ID documento correlato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "Modello documento correlato" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Richiede migrazione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Utente responsabile" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Cartelle radice" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "Cartella radice" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "Cartella radice creata!" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Vendite" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Tipo salvataggio" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Leggi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Token di sicurezza" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Impostazioni" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Condividi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Mostra storage" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "File singoli" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Dimensione" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "Dimensione (leggibile)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Preferiti" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Cartelle preferite" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Asterischi" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Stato in base alle attività\n" +"Scaduto: la data richiesta è trascorsa\n" +"Oggi: la data attività è oggi\n" +"Pianificato: attività future." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Deposito" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Lo storage è nascosto" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Storage" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Gli storage sono usati per organizzare i tuoi documenti." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Sottocategorie" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Sottocartelle" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Sottocartella" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Sistema" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Etichetta" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Il nome dell'etichetta esiste già!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Etichette" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Le etichette sono usate per classificare i documenti." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Etichette..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Informazioni tecniche" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Il campo attivo permette di nascondere la categoria senza rimuoverla." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "Il campo attivo permette di nascondere l'etichetta senza rimuoverla." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "Il nome della cartella non è valido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "Il file ha un'estensione vietata." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "Il nome del file non è valido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "La dimensione massima di upload è %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"Il modello (tipo documento Odoo) a cui corrisponde questo alias. Qualsiasi e-" +"mail in arrivo che non risponde a un record esistente causerà la creazione " +"di un nuovo record di questo modello (es. un task progetto)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"Il nome dell'alias email, ad es. 'lavori' se vuoi ricevere email per " +"" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "Il nome del gruppo deve essere unico!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" +"Il tipo di salvataggio viene utilizzato per determinare come un file viene " +"salvato dal sistema. Se si modifica questa impostazione, si può eseguire la " +"migrazione dei file esistenti manualmente attivando l'azione." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Questa cartella deve essere associata a un record." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Totale elementi" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Totale file" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Totale sottocartelle" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "Totale file" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "In viaggio" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo di attività eccezione sul record." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Accesso in eliminazione" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Sblocca" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Decomprimi le email come" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Carica" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Carica file" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Carica il tuo primo file." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Utente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Utenti" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Fattura fornitore" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "Procedura guidata sposta file DMS" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "Procedura guidata per condividere i record DMS" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Accesso in scrittura" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "È necessario prima selezionare una cartella" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "elemento(i)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "mail.catchall.domain" + +#~ msgid "Actions" +#~ msgstr "Azioni" + +#~ msgid "Views" +#~ msgstr "Viste" diff --git a/dms/i18n/nl.po b/dms/i18n/nl.po new file mode 100644 index 00000000..766a07e5 --- /dev/null +++ b/dms/i18n/nl.po @@ -0,0 +1,2238 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-12-13 03:55+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: 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" +"X-Generator: Weblate 3.10\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Bestanden" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Submappen" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" diff --git a/dms/i18n/pt.po b/dms/i18n/pt.po new file mode 100644 index 00000000..79b2eeda --- /dev/null +++ b/dms/i18n/pt.po @@ -0,0 +1,2298 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-29 21:34+0000\n" +"Last-Translator: Peter Romão \n" +"Language-Team: none\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.17\n" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Defina como os e-mails recebidos são processados:\n" +"\n" +" - Arquivos Singulares: O e-mail é anexado à diretoria e\n" +" todos os anexos são criados como arquivos.\n" +"\n" +" - Subdiretoria: Um novo subdiretoria é criado para cada e-" +"mail\n" +" e o e-mail está anexado a este subdiretoria. Os anexos\n" +" são criados como arquivos do subdiretoria.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Arquivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Subdiretorias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Um dicionário de Python que será avaliado para fornecer valores predefinidos " +"ao criar novos registos para este pseudónimo." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Uma diretoria não pode ser uma raiz e ter uma diretoria ascendente." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Uma diretoria precisa de ter uma diretoria ascendente." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "Uma diretoria precisa de ter um modelo no armazenamento por anexos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Já existe uma diretoria com o mesmo nome." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" +"Um arquivo deve ter ID de modelo e de recurso no armazenamento por anexos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Uma diretoria raiz precisa ter um armazenamento." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Mixin Dms Abstrato" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Aceite E-mails de" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Grupos de Acesso" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Informação de Acesso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Aviso de acesso" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Contabilidade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Acção Necessária" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Ativo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Atividades" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoração de Atividade Excepcional" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Estado da Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Ícone do Tipo de Atividade" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Adicione uma nova Diretoria." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Adicione um novo Arquivo." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Admin" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Pseudônimo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Segurança de Contacto do Psudónimo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Nome do Pseudónimo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Configuração do Pseudónimo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Alias-Mail-Extraction" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Modelo c/ Pseudónimo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Todos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Todos os Arquivos" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Ocorreu um erro durante o upload" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Aplicações" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Arquivado" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Arquivos Arquivados" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Anexo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Número de Anexos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Arquivo em Anexo" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Base" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Categorias" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "As categorias são usadas para categorizar documentos." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Categoria" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "Nome da categoria já existe!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Checksum/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Categorias Descendentes" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Grupos Descendentes" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Clique para adicionar uma nova diretoria." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Clique para adicionar um novo arquivo." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Clique pra criar uma nova etiqueta." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Fechado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Cor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Índice de Cores" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Empresa" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Grupos Completos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Nome Completo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Diretorias completas" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Ajuste de Configurações" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Configuração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Conteúdo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Conteúdo Binário" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Conteúdo Arquivo" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Contrato" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Contratos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Contagem de Diretorias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Contagem de Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Contagem de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Contagem de Títulos de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Contagem de Subcategorias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Contagem de Subdiretorias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Contagem de Título de Subdiretorias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Contagem de Etiquetas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Contagem de Utilizadores" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Criar" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Acesso à Criação" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Criar Diretoria" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Criar Armazenamento" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Criar uma nova Categoria." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Criar um novo Armazenamento de Documentos." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Criar uma nova Diretoria Raiz." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Criar um novo objeto de Armazenamento." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Criar arquivos a partir de anexos de mensagens" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Data de Criação" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Tipo de Salvaguarda Atual" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Mensagem Personalizada de E-mail Rejeitado" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Cliente" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Fatura do Cliente" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL do Portal do Cliente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mixin de Segurança DMS" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "Mixin de miniaturas DMS e ícones" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Base de Dados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Valores Predefinidos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Definir extensões de arquivo proibidas" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" +"Define uma lista de extensões de arquivo proibidas. (Exemplo: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Define o tamanho máximo de carregamento em MB. Padrão (25MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Eliminar Acesso" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Diretorias" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Diretorias podem ser usadas para estruturar e organizar\n" +" arquivos diretamente em Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Diretoria" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Categoria do Documento" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Etiqueta de Documento" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Estado da Diretoria de Documentos de Integração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Estado do Arquivo de Documentos de Integração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Estado de Documentos de Integração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Estado de Armazenamento de Documentos de Integração" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Feito" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Editor" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Pseudónimo de E-mail" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Fio de Comunicação E-mail" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Erro! Não é possível criar categorias recursivas." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Erro! Não é possível criar diretorias recursivas." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Utilizadores Explícitos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Extensão" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Extensões" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Externo" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Arquivo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Carregamento de Arquivo" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Arquivos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Os arquivos são usados para guardar conteúdo diretamente no Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Filestore" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Parceiros)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Ícone do fonte awesome ex. fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Configurações Gerais" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Grupo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Nome do Grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Utilizadores do Grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Grupos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Tem Mensagem" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Recursos Humanos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID do registo ascendente que armazena o pseudónimo (Ex.: projeto que " +"armazena o pseudónimo de criação de tarefas)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Ícone" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "URL do Icone" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Ícone para indicar uma exceção na atividade." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Se um arquivo for definido como arquivado, ele não será exibido, mas ele " +"ainda existe." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se estiver marcado, tem novas mensagens que requerem a sua atenção." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se estiver marcado, algumas mensagens têm um erro na entrega." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Se definido, diretorias e arquivos só estarão disponíveis para a empresa " +"selecionada." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Se definido, será este o conteúdo a ser enviado automaticamente para " +"utilizadores não autorizados em vez da mensagem predefinida." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Imagem" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Imagem 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Imagem 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Imagem 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Imagem 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Indique se as diretorias e arquivos também são criados automaticamente no " +"processo de composição de e-mail" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Indica se as diretorias e arquivos estão ocultos por predefinição." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Indica se a diretoria é um diretoria raiz.\n" +" Um diretoria raiz tem um objeto para configurações, enquanto uma " +"diretoria com um\n" +" ascendente definido herda as configurações do seu ascendente." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Herdar Grupos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Herdar permissões desde registo vinculado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Acesso à Criação Herdado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Acesso à Desvinculação Herdado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Acesso à Gravação Herdado" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Interno" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Recursos Internos/Humanos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Anexos inválidos!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Faturas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "É Seguidor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "É Diretoria Raiz" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Não é possível alterar o armazenamento." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Concluído" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Última Atualização" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Modelos Vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Modelo de anexos vinculado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "Registro ID de Anexos vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Bloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Bloqueado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Bloqueado por" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Gerente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migração Manual de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Erro na Entrega de Mensagem" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Mensagens" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Meta Informação" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrar" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" +"Migrar arquivo %(index)s de %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migrar Arquivos" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Estado da Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modelo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Data de modificação" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Prazo da Minha Atividade" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Minhas Diretorias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Meus Documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Meus Arquivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Nome" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Nova Diretoria Raiz" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Novo Armazenamento" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Notícias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Prazo da Próxima Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Resumo da Próxima Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo da Atividade Seguinte" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Não foi fornecido nenhum anexo" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Não Feito" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Não são resultados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de Ações" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Número de erros" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensagens que requerem acção" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensagens com um erro de entrega" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Somente os gerentes podem executar essa ação." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"ID opcional de um fio de comunicação (registro) ao qual todas as mensagens " +"recebidas serão anexadas, mesmo que não lhe tenham respondido. Se definido, " +"isto desabilitará completamente a criação de novos registros." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organizando" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Categoria Ascendente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Diretoria Ascendente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Grupo Ascendente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Modelo Ascendente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Caminho Ascendente" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "ID do Fio de Comunicação de Registo Ascendente" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "O grupo ascendente '%(parent)s' é descendente de '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Modelo ascendente que armazena o pseudónimo. O modelo que armazena a " +"referência ao pseudónimo não é necessariamente o modelo determinado por " +"alias_model_id (Ex.: project (parent_model) e task (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Parceiro" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Caminho JSON" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Nomes de Caminho" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Política para enviar uma mensagem sobre o documento usando o MailGateway.\n" +"- todos: Qualquer um pode escrever\n" +"- parceiros: somente parceiros autenticados\n" +"- seguidores: apenas seguidores do documento relacionado ou membros dos " +"seguintes grupos\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Portal" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL de Acesso ao Portal" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Pré-visualização" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Artigo" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Projeto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Acesso de Leitura" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Gravar Grupos de Acesso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Registo Referenciado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "ID do Fio de Registro" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Requer Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Utilizador Responsável" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Diretorias Raiz" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "Diretoria Raiz" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Vendas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Tipo de Salvaguarda" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Analisar" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Token de segurança" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Configurações" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Partilhar" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Mostrar armazenamentos" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Arquivos Singulares" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Tamanho" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Favorito" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Diretorias Favoritas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Estrelas" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Estados baseados nas atividades\n" +"Vencida: Ultrapassada a data planeada\n" +"Hoje: Data da atividade é a de hoje\n" +"Planeada: Atividades futuras." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Armazenamento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "O Armazenamento está Oculto" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Armazenamentos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Os armazenamentos são usados para configurar os seus Documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Subcategorias" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Subdiretorias" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Subdiretoria" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Sistema" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Etiqueta" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Já existe uma etiqueta com este nome!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Etiquetas" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "As etiquetas são usadas para categorizar documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Etiquetas..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Informação Técnica" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "O campo ativo permite que oculte a categoria sem a remover." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "O campo ativo permite que oculte a etiqueta sem a remover." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "O nome da diretoria é inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "O arquivo tem uma extensão de arquivo proibida." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "O nome do arquivo é inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "O tamanho máximo de upload é %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"O modelo (Odoo Document Kind) ao qual este pseudónimo corresponde. Qualquer " +"e-mail de entrada que não responda a um registo existente criará um novo " +"registo deste modelo (Ex.: uma Tarefa de Projeto)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"O nome do pseudónimo de e-mail, ex.: 'jobs' se quiser receber emails de " +"" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "O nome do grupo deve ser único!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Esta diretoria precisa de ser associada a um registo." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Total de Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Total de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Total de Subdiretorias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Viajando" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo de atividade de exceção registada." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Acesso à Desvinculação" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Desbloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Desempacotar e-mails como" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Carregar" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Carregar Arquivo" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Carregue o seu primeiro Arquivo." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Utilizador" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Utilizadores" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Fatura de Fornecedor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Mensagens do Website" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Histórico de comunicação do website" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Acesso à Gravação" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Deve selecionar uma diretoria primeiro" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "elementos(s)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "mail.catchall.domínio" + +#~ msgid "Actions" +#~ msgstr "Ações" + +#~ msgid "Views" +#~ msgstr "Visualizações" diff --git a/dms/i18n/pt_BR.po b/dms/i18n/pt_BR.po new file mode 100644 index 00000000..0ab454fe --- /dev/null +++ b/dms/i18n/pt_BR.po @@ -0,0 +1,2297 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-05 17:34+0000\n" +"Last-Translator: Adriano Prado \n" +"Language-Team: none\n" +"Language: pt_BR\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: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Defina como os e-mails recebidos são processados:\n" +"\n" +" - Arquivos únicos: o e-mail é anexado ao diretório e\n" +" todos os anexos são criados como arquivos.\n" +"\n" +" - Subdiretório: Um novo subdiretório é criado para cada " +"email\n" +" e o email é anexado a este subdiretório. Os anexos\n" +" são criados como arquivos do subdiretório.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Arquivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Sub-diretórios" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Um dicionário Python que será avaliado para fornecer valores padrão ao criar " +"novos registros para este alias." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Um diretório não pode ser raiz e ter um diretório superior." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Um diretório deve ter um diretório superior." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "Um diretório deve ter modelo no armazenamento de anexos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Já existe um diretório com o mesmo nome." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "Um arquivo deve ter modelo e ID de recurso no armazenamento de anexos." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Um diretório raiz precisa ter um armazenamento." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Mixin Sgd abstrato" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Aceitar e-mails de" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Grupos de Acesso" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Informações de Acesso" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Aviso de acesso" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Contabilidade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Ação Necessária" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Ativo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Atividades" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoração de exceção de atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Situação da Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Ícone Tipo Atividade" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Add um novo Diretório." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Add um novo Arquivo." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Admin" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Apelido" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Apelido Contato Segurança" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Nome Alternativo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Configuração Apelido" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Extração de Alias-Mail" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Modelo com alias" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Tudo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Todos os Arquivos" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Ocorreu um erro durante o carregamento" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Apps" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Arquivado" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Arquivos Arquivados" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Anexo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Cont. Anexos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Arquivo Anexado" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "Base" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Categorias" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Categorias são usadas para categorizar documentos." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Categoria" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "O nome da categoria já existe!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Categorias Inferiores" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Grupos Inferiores" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Clique para adicionar um novo diretório." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Clique para adicionar um novo arquivo." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Clique para criar uma novo marcador." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Fechado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Cor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Índice Cores" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Empresa" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Grupos completos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Diretórios completos" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Configuração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Conteúdo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Conteúdo Binário" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Arquivo de conteúdo" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Contrato" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Contratos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "# Diretórios" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "# Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "# Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "# Título dos Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "# Subcategorias" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "# Subdiretórios" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "# Título dos Subdiretórios" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "# Marcadores" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "# Usuários" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Criar" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Permissão de Criação" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Criar Diretório" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Criar Armazenamento" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Criar uma nova Categoria." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Crie um novo Armazenamento de Documentos." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Crie um novo diretório raiz." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Crie um novo objeto de Armazenamento." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Crie arquivos a partir de anexos de mensagens" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Data Criação" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Tipo de Salvamento Atual" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Mensagem Devolvida Personalizada" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Cliente" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Fatura Cliente" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL do Portal do Cliente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "SGD" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Mixin de segurança SGD" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "Banco de Dados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Valores Padrão" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Defina extensões de arquivo proibidas" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" +"Define uma lista de extensões de arquivo proibidas. (Exemplo: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Define o tamanho máximo de upload em MB. Padrão (25 MB)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Permissão de Exclusão" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Diretórios" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Os diretórios podem ser usados para estruturar e organizar\n" +" arquivos diretamente no Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Diretório" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Nome Exibição" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Categoria Documento" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Marcador Documento" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Estado do Diretório de Integração de Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Estado do Arquivo de Integração de Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Estado da Integração de Documentos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Estado de Armazenamento da Integração de Documentos" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Feito" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Editor" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Apelido de E-mail" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Tópico do e-mail" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Erro! Você não pode criar categorias recursivas." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Erro! Você não pode criar diretórios recursivos." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Usuários Explícitos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Extensão" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Extensões" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Externo" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Arquivo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Carregamento de Arquivo" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Arquivos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Arquivos são usados para salvar conteúdo diretamente no Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Armazenamento de Arquivos" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Parceiros)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Ícone da Fonte awesome e.x. fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Configurações Gerais" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Grupo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Agrupar Por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Nome do Grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Usuários do Grupo" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Grupos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Tem Menssagem" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Recursos Humanos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID do registro superior que contém o alias (exemplo: projeto que contém o " +"alias de criação da tarefa)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Ícone" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "Ícone URL" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Ícone para indicar uma atividade de exceção." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" +"Se um arquivo estiver definido como arquivado, ele não será exibido, mas " +"ainda existirá." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se marcada, novas mensagens requerem sua atenção." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se marcada, algumas mensagens apresentam um erro de entrega." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Se definido, os diretórios e arquivos estarão disponíveis apenas para a " +"empresa selecionada." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Se definido, esse conteúdo será enviado automaticamente para usuários não " +"autorizados, em vez da mensagem padrão." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Imagem" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Imagem 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Imagem 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Imagem 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Imagem 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Indica se diretórios e arquivos também são criados automaticamente no " +"processo de composição de mensagens" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Indica se diretórios e arquivos estão ocultos por padrão." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Indica se o diretório é um diretório raiz.\n" +" Um diretório raiz possui um objeto de configurações, enquanto um " +"diretório setado com\n" +" pai herda as configurações de seu pai." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Herdar Grupos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Herdar permissões do registro relacionado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Permissão de Criação Herdada" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Acesso de Desvinculação Herdado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Permissão de Escrita Herdada" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Interno" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Interno/Recursos Humanos" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Anexos Inválidos!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Faturas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "É Seguidor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "É Diretório Raiz" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Não é possível alterar o armazenamento." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Concluído" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Última Atualização" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Modelos Vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Modelo de anexos vinculados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "Anexo Vinculado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Bloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Bloqueado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Bloqueado por" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Gerente" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Migração Manual de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Erro na entrega de mensagens" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Mensagens" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Meta Informação" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Migrar" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" +"Migrar arquivo %(index)s de %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Migrar Arquivos" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Status da Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Modelo" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Data Modificação" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Prazo da minha Atividade" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Meus Diretórios" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Meus Documentos" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Meus Arquivos" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Nome" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Novo Diretório Raiz" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Novo Armazenamento" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Novos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Prazo para Próxima Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Resumo da Próxima Atividade" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo da Próxima Atividade" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Nenhum anexo foi fornecido" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Não realizado" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Sem Resultados" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de Ações" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Número de erros" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensagens que exigem ação" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensagens com erro de entrega" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Somente os gerentes podem executar esta ação." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"ID opcional de um tópico (registro) ao qual todas as mensagens recebidas " +"serão anexadas, mesmo que não tenham respondido. Se definido, isso " +"desabilitará completamente a criação de novos registros." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Organizando" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Categoria Superior" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Diretório Superior" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Grupo Superior" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Modelo Superior" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Caminho Superior" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "ID do tópico do registro superior" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "O grupo superior '%(parent)s' é filho de '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Modelo pai que contém o alias. O modelo que contém a referência de alias não " +"é necessariamente o modelo fornecido por alias_model_id (exemplo: projeto " +"(modelo_pai) e tarefa (modelo))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Parceiro" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Caminho Json" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Política para postar uma mensagem no documento usando o mailgateway.\n" +"- todos: todos podem postar\n" +"- parceiros: apenas parceiros autenticados\n" +"- seguidores: apenas seguidores do documento relacionado ou membros dos " +"canais seguintes\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Portal" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL do Portal de Acesso" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Visualização" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Produto" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Projeto" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Permissão de Leitura" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Registro Referenciado" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Requer Migração" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Usuário Responsável" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Diretórios Raiz" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Vendas" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Salvar Como" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Procurar" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Token de Segurança" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Configurações" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Compartilhar" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Mostrar armazenamentos" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Arquivos Únicos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Tamanho" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Favorito" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Diretórios Favoritos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Favoritos" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Status baseado em atividades\n" +"Atrasado: a data de vencimento já passou\n" +"Hoje: a data da atividade é hoje\n" +"Planejado: Atividades futuras." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Armazenamento" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Armazenamento está Oculto" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Armazenamentos" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Os armazenamentos são usados para configurar seus Documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Subcategorias" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Subdiretórios" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Subdiretório" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Sistema" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Marcador" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "O nome do marcador já existe!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Marcadores" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Marcadores são usadas para categorizar documentos." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Marcadores..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Informação Técnica" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "O campo ativo permite ocultar a categoria sem removê-la." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "O campo ativo permite ocultar o marcador sem removê-lo." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "O nome do diretório é inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "O arquivo tem uma extensão proibida." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "O nome do arquivo é inválido." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "O tamanho máximo de upload é %s MB." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"O modelo (Tipo de Documento Odoo) ao qual este alias corresponde. Qualquer e-" +"mail recebido que não responda a um registro existente causará a criação de " +"um novo registro deste modelo (por exemplo, uma Tarefa de Projeto)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"O nome do alias de e-mail, por ex. 'empregos' se você quiser receber e-mails " +"para " + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "O nome do grupo deve ser único!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Este diretório precisa estar associado a um registro." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Total de Elementos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Total de Arquivos" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Total de Subdiretórios" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Viajando" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Tipo" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo de atividade de exceção registrada." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Desvincular Permissão" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Desbloquear" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Descompacte e-mails como" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Carregar" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Carregar Arquivo" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Carregue seu primeiro arquivo." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Usuário" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Usuários" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Fatura Fornecedor" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Mensagens do Site" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "Histórico de comunicação do Site" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Permissão de Gravação" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Você deve selecionar um diretório primeiro" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "elemento(s)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" + +#~ msgid "Actions" +#~ msgstr "Ações" + +#~ msgid "Views" +#~ msgstr "Visualizações" diff --git a/dms/i18n/ru.po b/dms/i18n/ru.po new file mode 100644 index 00000000..1b664b30 --- /dev/null +++ b/dms/i18n/ru.po @@ -0,0 +1,2323 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ru\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: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory " +"and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each " +"email\n" +" and the mail is attached to this subdirectory. The " +"attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" +" Определяет, как обрабатываются входящие письма:\n" +"\n" +" - Отдельные файлы: Письмо прикрепляется к каталогу,\n" +" а все вложения создаются как файлы.\n" +"\n" +" - Подкаталог: Для каждого письма создается новый подкаталог,\n" +" и письмо прикрепляется к этому подкаталогу. Вложения\n" +" создаются как файлы подкаталога.\n" +" " + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "%s (копия)" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "%s Файлы" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "%s Подкаталоги" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" +"\n" +" Архивировать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" +"\n" +" Разархивировать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" +"\n" +" Скачать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving " +"files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those " +"of the folder that contains it, therefore, it is possible that when you " +"change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" +"\n" +" ВНИМАНИЕ: Советы, которые следует помнить перед перемещением " +"файлов:
\n" +" - Это изменение нельзя отменить.
\n" +" - Помните, что права доступа к файлам соответствуют правам " +"папки, которая их содержит, поэтому возможно, что при ее изменении " +"права также изменятся.
\n" +" Вы делаете это изменение на свой страх и риск." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" +"\n" +" Открыть" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" +"\n" +" Файлы" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" +"\n" +" Каталоги" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" +"\n" +" Заблокировать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" +"\n" +" Редактировать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" +"\n" +" Удалить" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" +"\n" +" Разблокировать" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" +"\n" +" &nbsp;" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" +"\n" +" &nbsp;" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "Каталоги" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "Файлы" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" +"@\n" +" @ " + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "Действия" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "Документы" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "Операции" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "Представления" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" +"Словарь Python, который будет вычисляться для предоставления значений по умолчанию " +"при создании новых записей для этого псевдонима." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "Каталог не может быть корневым и иметь родительский каталог." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "Каталог должен иметь родительский каталог." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "Каталог должен иметь модель в хранилище вложений." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "Каталог с таким именем уже существует." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "Файл должен иметь модель и ID ресурса в хранилище вложений." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "Файл с таким именем уже существует в этом каталоге." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "Корневой каталог должен иметь хранилище." + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "Абстрактный миксин СУД" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "Принимать письма от" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "Группы доступа" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "Информация о доступе" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "Предупреждение о доступе" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "Бухгалтерия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "Требуется действие" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "Активно" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "Действия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Оформление исключения действия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "Состояние действия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "Иконка типа действия" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "Добавить новый каталог." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "Добавить новый файл." + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "Добавить дополнительное содержимое для отображения в письме" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "Администратор" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "Псевдоним" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "Безопасность контактов псевдонима" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "Домен псевдонима" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "Имя домена псевдонима" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "Email псевдонима" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "Имя псевдонима" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "Настройка псевдонима" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "Статус псевдонима" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "Статус псевдонима, оцененный по последнему полученному сообщению." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "Извлечение из псевдонима-почты" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "Модель псевдонима" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "Все" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "Все файлы" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "Произошла ошибка во время загрузки" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "Приложения" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "Архивировано" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "Архивированные файлы" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "Вы уверены? Все файлы будут перемещены." + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "Вложение" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "Количество вложений" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "Файл вложения" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "База" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "Отмена" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "Категории" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "Категории используются для классификации документов." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "Категория" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "Категория с таким именем уже существует!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "Контрольная сумма/SHA1" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "Дочерние категории" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "Дочерние группы" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "Нажмите, чтобы добавить новый каталог." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "Нажмите, чтобы добавить новый файл." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "Нажмите, чтобы создать новый тег." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "Закрыто" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "Цвет" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "Индекс цвета" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "Компании" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "Компания" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "Полные группы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "Полное имя" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "Полные каталоги" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "Настройки конфигурации" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "Конфигурация" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "Содержимое" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "Двоичное содержимое" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "Файл содержимого" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "Договор" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "Договоры" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "Количество каталогов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "Количество элементов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "Количество файлов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "Количество файлов (заголовок)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "Количество подкатегорий" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "Количество подкаталогов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "Количество подкаталогов (заголовок)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "Количество тегов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "Количество пользователей" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "Создать" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "Доступ на создание" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "Создать каталог" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "Создать хранилище" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "Создать новую категорию." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "Создать новое хранилище документов." + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "Создать новый корневой каталог." + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "Создать новый объект хранилища." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "Создавать файлы из вложений сообщений" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "Дата создания" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "Дата создания" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "Текущий тип сохранения" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "Пользовательское сообщение о возврате" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "Клиент" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "Счет клиенту" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "URL портала клиента" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "СУД" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "Миксин безопасности СУД" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "Миксин миниатюр и иконок СУД" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "База данных" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "Значения по умолчанию" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "Определить запрещенные расширения файлов" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "Определить максимальный размер загружаемого файла в МБ" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "Определяет список запрещенных расширений файлов. (Пример: 'exe,msi')" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "Определяет максимальный размер загрузки в МБ. По умолчанию (25 МБ)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "Доступ на удаление" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "Каталоги" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" +"Каталоги можно использовать для структурирования и организации\n" +" файлов непосредственно в Odoo." + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "Каталог" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "Поле пути СУД" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "Категория документов" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "Хранилище документов создано!" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "Тег документа" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "Документы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "Состояние онбординга каталога документов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "Состояние онбординга файла документов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "Состояние онбординга документов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "Состояние онбординга хранилища документов" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "Выполнено" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "Редактор" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "Элементы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "Почтовый псевдоним" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "Почтовая ветка" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "Домен электронной почты, например 'example.com' в 'odoo@example.com'" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "Ошибка! Вы не можете создавать рекурсивные категории." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "Ошибка! Вы не можете создавать рекурсивные каталоги." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "Явные пользователи" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "Расширение" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "Расширения" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "Внешние" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "Файл" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "Расширения файлов" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "Онбординг файлов" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "Размер файла" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "Загрузка файлов" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "Вспомогательная модель для потоковой передачи файлов для контроллеров" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "Файлы" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "Файлы используются для сохранения содержимого непосредственно в Odoo." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "Файловое хранилище" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "Первый файл загружен!" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "Подписчики" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "Подписчики (партнеры)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Иконка Font awesome, например fa-tasks" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "Общие настройки" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "Группа" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "Группировать по" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "Название группы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "Пользователи группы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "Группы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "Имеет сообщение" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "Кадры" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "ID" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task " +"creation alias)" +msgstr "" +"ID родительской записи, содержащей псевдоним (например, проект, содержащий псевдоним " +"создания задачи)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "Иконка" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "URL иконки" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Иконка, указывающая на действие-исключение." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "Если файл архивирован, он не отображается, но все еще существует." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Если отмечено, новые сообщения требуют вашего внимания." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Если отмечено, некоторые сообщения имеют ошибку доставки." + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" +"Если установлено, каталоги и файлы будут доступны только для выбранной " +"компании." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" +"Если установлено, это содержимое будет автоматически отправляться " +"неавторизованным пользователям вместо сообщения по умолчанию." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "Изображение" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "Изображение 1024" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "Изображение 128" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "Изображение 256" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "Изображение 512" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access " +"(for example, if some directories are related with any sale, only users with " +"read access to these sale can access)" +msgstr "" +"Указывает, работает ли доступ к каталогам и файлам только с доступом к " +"связанной модели (например, если некоторые каталоги связаны с продажами, только " +"пользователи с доступом на чтение к этим продажам могут получить доступ)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process too" +msgstr "" +"Указывает, создаются ли каталоги и файлы автоматически также в процессе " +"составления почты" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "Указывает, скрыты ли каталоги и файлы по умолчанию." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a " +"set\n" +" parent inherits the settings form its parent." +msgstr "" +"Указывает, является ли каталог корневым.\n" +" Корневой каталог имеет объект настроек, в то время как каталог с " +"установленным\n" +" родителем наследует настройки от своего родителя." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "Унаследованные группы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "Наследовать права от связанной записи" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "Унаследованный доступ на создание" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "Унаследованный доступ на удаление" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "Унаследованный доступ на запись" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "Внутренние" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "Внутренние / Кадры" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "Неверные вложения!" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "Счета" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "Является подписчиком" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "Является корневым каталогом" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "Невозможно изменить хранилище." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "Невозможно переключиться на родителя с другим хранилищем." + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "Только что выполнено" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "Последний раз обновлено" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "Дата последнего обновления" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "Последнее обновление" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "Ссылка" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "Связанные модели" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "Модель связанных вложений" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "ID записи связанных вложений" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "Обнаружение входящих на основе локальной части" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "Заблокировать" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "Заблокировано" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "Заблокировано" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "Менеджер" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "Ручная миграция файлов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "Ошибка доставки сообщения" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "Сообщения" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "Мета-информация" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "Мигрировать" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "Мигрировать файл %(index)s из %(record_count)s [ %(dms_file_migration)s ]" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "Мигрировать файлы" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "Миграция" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "Статус миграции" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "Модель" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "Дата изменения" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "Переместить" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "Переместить файлы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Мой крайний срок действия" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "Мои каталоги" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "Мои документы" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "Мои файлы" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "Название" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "Новый корневой каталог" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "Новое хранилище" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "Новости" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Крайний срок следующего действия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "Сводка следующего действия" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "Тип следующего действия" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "Вложение не предоставлено" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "Не выполнено" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "Нет результатов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "Заметка" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "Количество действий" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "Количество ошибок" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Количество сообщений, требующих действия" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Количество сообщений с ошибкой доставки" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "Онбординг" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "Онбординг каталога" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "Онбординг файла" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "Этап онбординга" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "Онбординг хранилища" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "Могут быть перемещены только файлы в одном корневом каталоге." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "Только менеджеры могут выполнить это действие." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" +"Необязательный ID ветки (записи), к которой будут прикрепляться все входящие " +"сообщения, даже если они не являются ответом на нее. Если установлено, это " +"полностью отключает создание новых записей." + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "Организация" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "Родительская категория" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "Родительский каталог" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "Родительская группа" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "Родительская модель" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "Родительский путь" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "ID ветки родительской записи" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "Родительская группа '%(parent)s' является дочерней для '%(current)s'." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not " +"necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" +"Родительская модель, содержащая псевдоним. Модель, содержащая ссылку на " +"псевдоним, не обязательно является моделью, заданной alias_model_id (например: " +"проект (parent_model) и задача (model))" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "Партнер" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "Путь Json" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "Имена пути" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following " +"channels\n" +msgstr "" +"Политика публикации сообщения в документе с использованием почтового шлюза.\n" +"- все: все могут публиковать\n" +"- партнеры: только аутентифицированные партнеры\n" +"- подписчики: только подписчики связанного документа или участники следующих " +"каналов\n" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "Портал" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "URL доступа к порталу" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "Предпросмотр" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "Предпросмотр записи" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "Продукт" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "Проект" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "Доступ на чтение" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "Получатели" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "Группы доступа к записям" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "Связанная запись" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "ID ветки записи" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "Связанный документ" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "ID связанного документа" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "Модель связанного документа" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "Требуется миграция" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "Ответственный пользователь" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "Корневые каталоги" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "Корневой каталог" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "Корневой каталог создан!" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "Продажи" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "Тип сохранения" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "Сканировать" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "Токен безопасности" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "Настройки" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "Поделиться" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "Показать хранилища" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "Отдельные файлы" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "Размер" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "Размер (удобочитаемый)" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "Избранное" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "Избранные каталоги" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "Звезды" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Статус на основе действий\n" +"Просрочено: Срок уже прошел\n" +"Сегодня: Дата действия сегодня\n" +"Запланировано: Будущие действия." + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "Хранилище" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "Хранилище скрыто" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "Хранилища" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "Хранилища используются для настройки ваших документов." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "Подкатегории" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "Подкаталоги" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "Подкаталог" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "Система" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "Тег" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Тег с таким именем уже существует!" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "Теги" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "Теги используются для классификации документов." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "Теги..." + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "Техническая информация" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "Поле активно позволяет скрыть категорию без ее удаления." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "Поле активно позволяет скрыть тег без его удаления." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "Недопустимое имя каталога." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "Файл имеет запрещенное расширение." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "Недопустимое имя файла." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "Максимальный размер загрузки составляет %s МБ." + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " +"email that does not reply to an existing record will cause the creation of a " +"new record of this model (e.g. a Project Task)" +msgstr "" +"Модель (тип документа Odoo), которой соответствует этот псевдоним. Любое входящее " +"письмо, которое не является ответом на существующую запись, приведет к созданию " +"новой записи этой модели (например, задачи проекта)" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" +"Имя почтового псевдонима, например 'jobs', если вы хотите перехватывать письма для " +"" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "Название группы должно быть уникальным!" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you " +"change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" +"Тип сохранения используется для определения того, как файл сохраняется системой. Если вы " +"измените этот параметр, вы можете вручную перенести существующие файлы, запустив " +"действие." + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "Этот каталог должен быть связан с записью." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "Всего элементов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "Всего файлов" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "Всего подкаталогов" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "Всего файлов" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "Командировки" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "Тип" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Тип действия-исключения в записи." + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "Доступ на удаление" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "Разблокировать" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "Распаковывать письма как" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "Загрузить" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "Загрузить файл" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "Загрузите ваш первый файл." + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "Пользователь" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "Пользователи" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "Счет поставщика" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "Сообщения веб-сайта" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "История коммуникаций на веб-сайте" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "Мастер перемещения файлов СУД" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "Мастер для обмена записями СУД" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "Доступ на запись" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "Сначала необходимо выбрать каталог" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "элемент(ов)" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "exe,msi" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "mail.catchall.domain" \ No newline at end of file diff --git a/dms/i18n/sv.po b/dms/i18n/sv.po new file mode 100644 index 00000000..b6027afa --- /dev/null +++ b/dms/i18n/sv.po @@ -0,0 +1,2228 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * dms +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\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: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_process +msgid "" +" Define how incoming emails are processed:\n" +"\n" +" - Single Files: The email gets attached to the directory and\n" +" all attachments are created as files.\n" +"\n" +" - Subdirectory: A new subdirectory is created for each email\n" +" and the mail is attached to this subdirectory. The attachments\n" +" are created as files of the subdirectory.\n" +" " +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "%s (copy)" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Files" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "%s Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Archive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unarchive" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Download" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "" +"\n" +" ATTENTION: Tips to keep in mind before moving files:
\n" +" - This change cannot be undone.
\n" +" - Remember that the permissions of the files are those of the folder that contains it, therefore, it is possible that when you change it, the permissions will also change.
\n" +" Make this change at your own risk." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Open" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Lock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Edit" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_kanban +msgid "" +"\n" +" Delete" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "" +"\n" +" Unlock" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "" +"\n" +" &nbsp;" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "" +"@\n" +" @ " +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Actions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Operations" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Views" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_defaults +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory can't be a root and have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have a parent directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory has to have model in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A directory with the same name already exists." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file must have model and resource ID in attachment storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "A file with the same name already exists in this directory." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "A root directory has to have a storage." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_abstract_dms_mixin +msgid "Abstract Dms Mixin" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Accept Emails from" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_access_groups +#: model:ir.ui.menu,name:dms.menu_dms_access_groups +msgid "Access Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Access Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_warning +#: model:ir.model.fields,field_description:dms.field_dms_file__access_warning +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__access_warning +msgid "Access warning" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_07_demo +msgid "Accounting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__active +#: model:ir.model.fields,field_description:dms.field_dms_tag__active +msgid "Active" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_ids +msgid "Activities" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_state +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_state +msgid "Activity State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "Add a new Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +msgid "Add a new File." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_wizard_dms_share__note +msgid "Add extra content to display in the email" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_01_demo +msgid "Admin" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_id +msgid "Alias" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_contact +msgid "Alias Contact Security" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain_id +msgid "Alias Domain" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_domain +msgid "Alias Domain Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_full_name +msgid "Alias Email" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_name +msgid "Alias Name" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Alias Setting" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_status +msgid "Alias Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_status +msgid "Alias status assessed on the last message received." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Alias-Mail-Extraction" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_model_id +msgid "Aliased Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "All" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "All Files" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "An error occurred during the upload" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_06_demo +msgid "Apps" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__active +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Archived" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Archived Files" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Are you sure? All files will be moved." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_attachment +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__attachment +msgid "Attachment" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_attachment_count +#: model:ir.model.fields,field_description:dms.field_dms_file__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__attachment_id +msgid "Attachment File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_base +msgid "Base" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Cancel" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_category +#: model:ir.ui.menu,name:dms.menu_dms_category +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Categories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Categories are used to categorize Documents." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__category_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__category_id +#: model:ir.model.fields,field_description:dms.field_dms_file__category_id +#: model:ir.model.fields,field_description:dms.field_dms_tag__category_id +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Category" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_category_name_uniq +msgid "Category name already exists!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__checksum +msgid "Checksum/SHA1" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__child_category_ids +msgid "Child Categories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__child_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Child Groups" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +msgid "Click to add a new directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Click to add a new file." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Click to create a new tag." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__closed +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__closed +msgid "Closed" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__color +#: model:ir.model.fields,field_description:dms.field_dms_directory__color +#: model:ir.model.fields,field_description:dms.field_dms_file__color +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Color" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_tag__color +msgid "Color Index" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_company +msgid "Companies" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__company_id +#: model:ir.model.fields,field_description:dms.field_dms_file__company_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__company_id +msgid "Company" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Complete Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__complete_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__complete_name +msgid "Complete Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__complete_directory_ids +msgid "Complete directories" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config +msgid "Configuration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content +msgid "Content" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_binary +msgid "Content Binary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__content_file +msgid "Content File" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_11_demo +msgid "Contract" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_03_demo +msgid "Contracts" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_category__count_directories +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_directories +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_directories +msgid "Count Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_elements +msgid "Count Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_files +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files_title +#: model:ir.model.fields,field_description:dms.field_dms_storage__count_storage_files +#: model:ir.model.fields,field_description:dms.field_dms_tag__count_files +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__count_files +msgid "Count Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_files +msgid "Count Files Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_categories +msgid "Count Subcategories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories_title +msgid "Count Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_directories +msgid "Count Subdirectories Title" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__count_tags +msgid "Count Tags" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__count_users +msgid "Count Users" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_new_form +msgid "Create" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_create +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_create +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_create +msgid "Create Access" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_create_directory +msgid "Create Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_document_storage +msgid "Create Storage" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_category +msgid "Create a new Category." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_document_storage +msgid "Create a new Document Storage." +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_create_directory +msgid "Create a new Root Directory." +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Create a new Storage object." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__include_message_attachments +msgid "Create files from message attachments" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_uid +msgid "Created by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__create_date +#: model:ir.model.fields,field_description:dms.field_dms_category__create_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__create_date +#: model:ir.model.fields,field_description:dms.field_dms_file__create_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__create_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__create_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__create_date +msgid "Created on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Creation Date" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__save_type +msgid "Current Save Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_bounced_content +msgid "Custom Bounced Message" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_01_demo +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Customer" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_08_demo +msgid "Customer Invoice" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__access_url +#: model:ir.model.fields,help:dms.field_dms_file__access_url +msgid "Customer Portal URL" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +msgid "DMS" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_security_mixin +msgid "DMS Security Mixin" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_mixins_thumbnail +msgid "DMS thumbnail and icon mixin" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__database +msgid "Database" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_defaults +msgid "Default Values" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define forbidden file extensions" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Define the maximum upload size of a file in MB" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Defines a list of forbidden file extensions. (Example: 'exe,msi')" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_res_config_settings__documents_binary_max_size +msgid "Defines the maximum upload size in MB. Default (25MB)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_unlink +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_unlink +msgid "Delete Access" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_storage +#: model:ir.actions.act_window,name:dms.action_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_access_group__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_category__directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_directory_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__directory_ids +#: model:ir.ui.menu,name:dms.menu_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_directories_storage +#: model_terms:ir.actions.act_window,help:dms.action_dms_directory +msgid "" +"Directories can be used to structure and organize\n" +" files directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_directory +#: model:ir.model.fields,field_description:dms.field_dms_file__directory_id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__directory_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_create_directory +msgid "Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__display_name +#: model:ir.model.fields,field_description:dms.field_dms_category__display_name +#: model:ir.model.fields,field_description:dms.field_dms_directory__display_name +#: model:ir.model.fields,field_description:dms.field_dms_file__display_name +#: model:ir.model.fields,field_description:dms.field_dms_storage__display_name +#: model:ir.model.fields,field_description:dms.field_dms_tag__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__display_name +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__display_name +msgid "Display Name" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/path_json/path_owl.esm.js:0 +msgid "Dms Path Field" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_category +msgid "Document Category" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_document_storage +msgid "Document Storage Created!" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_tag +msgid "Document Tag" +msgstr "" + +#. module: dms +#: model:ir.module.category,name:dms.category_dms_security +#: model:ir.ui.menu,name:dms.main_menu_dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms_breadcrumbs +#: model_terms:ir.ui.view,arch_db:dms.portal_my_home_dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Documents" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_directory_state +msgid "Documents Onboarding Directory State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_file_state +msgid "Documents Onboarding File State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_state +msgid "Documents Onboarding State" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_company__documents_onboarding_storage_state +msgid "Documents Onboarding Storage State" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__done +msgid "Done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_lock_editor +msgid "Editor" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_email +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Email Alias" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_domain +msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_category.py:0 +msgid "Error! You cannot create recursive categories." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "Error! You cannot create recursive directories." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__explicit_user_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Explicit Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__extension +msgid "Extension" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_forbidden_extensions +msgid "Extensions" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_05_demo +msgid "External" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_file +#: model:onboarding.onboarding.step,title:dms.onboarding_step_upload_file +msgid "File" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Extensions" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding,name:dms.onboarding_onboarding_dms_file +msgid "File Onboarding" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Size" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "File Upload" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_ir_binary +msgid "File streaming helper model for controllers" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_file +#: model:ir.actions.act_window,name:dms.action_dms_file_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_storage_migration +#: model:ir.actions.act_window,name:dms.action_dms_file_wizard_selector +#: model:ir.actions.act_window,name:dms.action_dms_files_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_directory +#: model:ir.actions.act_window,name:dms.action_dms_files_storage +#: model:ir.model.fields,field_description:dms.field_dms_category__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__file_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__storage_file_ids +#: model:ir.model.fields,field_description:dms.field_dms_tag__file_ids +#: model:ir.ui.menu,name:dms.menu_dms_file +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Files" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_file +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_file_storage_migration +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_all_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_directory +#: model_terms:ir.actions.act_window,help:dms.action_dms_files_storage +msgid "Files are used to save content directly in Odoo." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_storage__save_type__file +msgid "Filestore" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_upload_file +msgid "First File Uploaded!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_follower_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_partner_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_type_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_settings_general +#: model:ir.ui.menu,name:dms.menu_dms_settings_general +msgid "General Settings" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Group" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_search +msgid "Group By" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__name +msgid "Group Name" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__users +msgid "Group Users" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__group_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__group_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__has_message +#: model:ir.model.fields,field_description:dms.field_dms_file__has_message +msgid "Has Message" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_02_demo +msgid "Human Resource" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__id +#: model:ir.model.fields,field_description:dms.field_dms_category__id +#: model:ir.model.fields,field_description:dms.field_dms_directory__id +#: model:ir.model.fields,field_description:dms.field_dms_file__id +#: model:ir.model.fields,field_description:dms.field_dms_storage__id +#: model:ir.model.fields,field_description:dms.field_dms_tag__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__id +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__id +msgid "ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_thread_id +msgid "" +"ID of the parent record holding the alias (example: project holding the task" +" creation alias)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_exception_icon +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_kanban +msgid "Icon" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_file__icon_url +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__icon_url +msgid "Icon URL" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_icon +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_file__active +msgid "If a file is set to archived, it is not displayed, but still exists." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__company_id +#: model:ir.model.fields,help:dms.field_dms_directory__company_id +#: model:ir.model.fields,help:dms.field_dms_file__company_id +#: model:ir.model.fields,help:dms.field_dms_storage__company_id +msgid "" +"If set, directories and files will only be available for the selected " +"company." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_bounced_content +msgid "" +"If set, this content will automatically be sent out to unauthorized users " +"instead of the default message." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1920 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1920 +msgid "Image" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_1024 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_128 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_128 +msgid "Image 128" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_256 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_256 +msgid "Image 256" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_file__image_512 +#: model:ir.model.fields,field_description:dms.field_dms_mixins_thumbnail__image_512 +msgid "Image 512" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,help:dms.field_dms_storage__inherit_access_from_parent_record +msgid "" +"Indicate if directories and files access work only with related model access" +" (for example, if some directories are related with any sale, only users " +"with read access to these sale can access)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_storage__include_message_attachments +msgid "" +"Indicate if directories and files auto-create in mail composition process " +"too" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,help:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,help:dms.field_dms_file__is_hidden +#: model:ir.model.fields,help:dms.field_dms_storage__is_hidden +msgid "Indicates if directories and files are hidden by default." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__is_root_directory +msgid "" +"Indicates if the directory is a root directory.\n" +" A root directory has a settings object, while a directory with a set\n" +" parent inherits the settings form its parent." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__inherit_group_ids +msgid "Inherit Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_inherit_access_from_parent_record +#: model:ir.model.fields,field_description:dms.field_dms_storage__inherit_access_from_parent_record +msgid "Inherit permissions from related record" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_create +msgid "Inherited Create Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_unlink +msgid "Inherited Unlink Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_inclusive_write +msgid "Inherited Write Access" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_01_demo +msgid "Internal" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Internal / Human Resource" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Invalid attachments!" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Invoices" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_is_follower +#: model:ir.model.fields,field_description:dms.field_dms_file__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_root_directory +msgid "Is Root Directory" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change the storage." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "It is not possible to change to a parent with other storage." +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__just_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__just_done +msgid "Just done" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_category__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_file__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_uid +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_uid +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__write_date +#: model:ir.model.fields,field_description:dms.field_dms_category__write_date +#: model:ir.model.fields,field_description:dms.field_dms_directory__write_date +#: model:ir.model.fields,field_description:dms.field_dms_file__write_date +#: model:ir.model.fields,field_description:dms.field_dms_storage__write_date +#: model:ir.model.fields,field_description:dms.field_dms_tag__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_file_move__write_date +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__write_date +msgid "Last Updated on" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Last update" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__share_link +msgid "Link" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__allowed_model_ids +#: model:ir.model.fields,field_description:dms.field_dms_storage__model_ids +msgid "Linked Models" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_model +#: model:ir.model.fields,field_description:dms.field_dms_file__res_model +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_model +msgid "Linked attachments model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__res_id +#: model:ir.model.fields,field_description:dms.field_dms_file__res_id +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__res_id +msgid "Linked attachments record ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_incoming_local +msgid "Local-part based incoming detection" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Lock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__is_locked +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Locked" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__locked_by +msgid "Locked By" +msgstr "" + +#. module: dms +#: model:res.groups,name:dms.group_dms_manager +msgid "Manager" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Manual File Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__message_ids +msgid "Messages" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Meta Information" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_dms_attachment_migrate +msgid "Migrate" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Migrate File %(index)s of %(record_count)s [ %(dms_file_migration)s ]" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Migrate Files" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.menu_dms_file_migration +msgid "Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__migration +msgid "Migration Status" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__model_id +#: model:ir.model.fields,field_description:dms.field_dms_storage__model +msgid "Model" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "Modification Date" +msgstr "" + +#. module: dms +#: model:ir.actions.server,name:dms.action_wizard_dms_file_move +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Move" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_file_move_act_window +msgid "Move files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__my_activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "My Directories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "My Documents" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +msgid "My Files" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/controllers/portal.py:0 +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__name +#: model:ir.model.fields,field_description:dms.field_dms_category__name +#: model:ir.model.fields,field_description:dms.field_dms_directory__name +#: model:ir.model.fields,field_description:dms.field_dms_file__name +#: model:ir.model.fields,field_description:dms.field_dms_storage__name +#: model:ir.model.fields,field_description:dms.field_dms_tag__name +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Name" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directory_new +#: model:ir.actions.act_window,name:dms.action_dms_file_new +msgid "New Root Directory" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage_new +msgid "New Storage" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_06_demo +msgid "News" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_date_deadline +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_summary +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_type_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "No attachment was provided" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_directory_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_file_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_state__not_done +#: model:ir.model.fields.selection,name:dms.selection__res_company__documents_onboarding_storage_state__not_done +msgid "Not done" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "Not results" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__note +msgid "Note" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,field_description:dms.field_dms_file__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_needaction_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__message_has_error_counter +#: model:ir.model.fields,help:dms.field_dms_file__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding +msgid "Onboarding" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_create_directory +msgid "Onboarding Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_upload_file +msgid "Onboarding File" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_onboarding_onboarding_step +msgid "Onboarding Step" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,step_image_alt:dms.onboarding_step_document_storage +msgid "Onboarding Storage" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "Only files in the same root directory can be moved." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/storage.py:0 +msgid "Only managers can execute this action." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_force_thread_id +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_organizing +msgid "Organizing" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_id +msgid "Parent Category" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_id +msgid "Parent Directory" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_group_id +msgid "Parent Group" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_model_id +msgid "Parent Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_category__parent_path +#: model:ir.model.fields,field_description:dms.field_dms_directory__parent_path +msgid "Parent Path" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_parent_thread_id +msgid "Parent Record Thread ID" +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/access_groups.py:0 +msgid "Parent group '%(parent)s' is child of '%(current)s'." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_parent_model_id +msgid "" +"Parent model holding the alias. The model holding the alias reference is not" +" necessarily the model given by alias_model_id (example: project " +"(parent_model) and task (model))" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_02_demo +msgid "Partner" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_json +msgid "Path Json" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__path_names +msgid "Path Names" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_contact +msgid "" +"Policy to post a message on the document using the mailgateway.\n" +"- everyone: everyone can post\n" +"- partners: only authenticated partners\n" +"- followers: only followers of the related document or members of following channels\n" +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_02_demo +#: model:dms.tag,name:dms.tag_05_demo +msgid "Portal" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_url +#: model:ir.model.fields,field_description:dms.field_dms_file__access_url +msgid "Portal Access URL" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.xml:0 +msgid "Preview" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js:0 +msgid "Preview Record" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_10_demo +msgid "Product" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_03_demo +msgid "Project" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_read +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_read +msgid "Read Access" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__partner_ids +msgid "Recipients" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_access_group +msgid "Record Access Groups" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_file__record_ref +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__record_ref +msgid "Record Referenced" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_force_thread_id +msgid "Record Thread ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__resource_ref +msgid "Related Document" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_id +msgid "Related Document ID" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_wizard_dms_share__res_model +msgid "Related Document Model" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__require_migration +msgid "Require Migration" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__activity_user_id +#: model:ir.model.fields,field_description:dms.field_dms_file__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_storage__root_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Root Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__root_directory_id +#: model:ir.model.fields,field_description:dms.field_dms_file__root_directory_id +msgid "Root Directory" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,done_text:dms.onboarding_step_create_directory +msgid "Root Directory Created!" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_04_demo +msgid "Sales" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,field_description:dms.field_dms_storage__save_type +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_search +msgid "Save Type" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Scan" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__access_token +#: model:ir.model.fields,field_description:dms.field_dms_file__access_token +msgid "Security Token" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Settings" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.wizard_dms_directory_share_action +#: model:ir.actions.act_window,name:dms.wizard_dms_file_share_action +msgid "Share" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Show storages" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__files +msgid "Single Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__size +#: model:ir.model.fields,field_description:dms.field_dms_file__size +#: model:ir.model.fields,field_description:dms.field_res_config_settings__documents_binary_max_size +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_migration_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_tree +#: model_terms:ir.ui.view,arch_db:dms.view_dms_storage_form +msgid "Size" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__human_size +#: model:ir.model.fields,field_description:dms.field_dms_file__human_size +msgid "Size (human readable)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__starred +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_kanban +msgid "Starred" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +msgid "Starred Directories" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__user_star_ids +msgid "Stars" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_state +#: model:ir.model.fields,help:dms.field_dms_file__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_dms_storage +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_directory__storage_id +#: model:ir.model.fields,field_description:dms.field_dms_file__storage_id +#: model:onboarding.onboarding.step,title:dms.onboarding_step_document_storage +#: model_terms:ir.ui.view,arch_db:dms.search_dms_directory +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file +#: model_terms:ir.ui.view,arch_db:dms.search_dms_file_migration +msgid "Storage" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_abstract_dms_mixin__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_directory__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_file__is_hidden +#: model:ir.model.fields,field_description:dms.field_dms_storage__is_hidden +msgid "Storage is Hidden" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_storage +#: model:ir.ui.menu,name:dms.menu_dms_storage +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "Storages" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_storage +msgid "Storages are used to configure your Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Subcategories" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_directories_all_directory +#: model:ir.actions.act_window,name:dms.action_dms_directories_directory +#: model:ir.model.fields,field_description:dms.field_dms_directory__child_directory_ids +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "Subdirectories" +msgstr "" + +#. module: dms +#: model:ir.model.fields.selection,name:dms.selection__dms_directory__alias_process__directory +msgid "Subdirectory" +msgstr "" + +#. module: dms +#: model:ir.ui.menu,name:dms.cat_menu_dms_config_system +msgid "System" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_tag_form +msgid "Tag" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_tag_name_uniq +msgid "Tag name already exists!" +msgstr "" + +#. module: dms +#: model:ir.actions.act_window,name:dms.action_dms_tag +#: model:ir.model.fields,field_description:dms.field_dms_category__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_directory__tag_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__tag_ids +#: model:ir.ui.menu,name:dms.menu_dms_tag +#: model_terms:ir.ui.view,arch_db:dms.view_dms_category_form +msgid "Tags" +msgstr "" + +#. module: dms +#: model_terms:ir.actions.act_window,help:dms.action_dms_tag +msgid "Tags are used to categorize Documents." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_new_form +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Tags..." +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Technical Information" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_category__active +msgid "The active field allows you to hide the category without removing it." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_tag__active +msgid "The active field allows you to hide the tag without removing it." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "The directory name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file has a forbidden file extension." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The file name is invalid." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/dms_file.py:0 +msgid "The maximum upload size is %s MB." +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_model_id +msgid "" +"The model (Odoo Document Kind) to which this alias corresponds. Any incoming" +" email that does not reply to an existing record will cause the creation of " +"a new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__alias_name +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" + +#. module: dms +#: model:ir.model.constraint,message:dms.constraint_dms_access_group_name_uniq +msgid "The name of the group must be unique!" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_abstract_dms_mixin__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_directory__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_file__storage_id_save_type +#: model:ir.model.fields,help:dms.field_dms_storage__save_type +msgid "" +"The save type is used to determine how a file is saved by the system. If you" +" change this setting, you can migrate existing files manually by triggering " +"the action." +msgstr "" + +#. module: dms +#. odoo-python +#: code:addons/dms/models/directory.py:0 +msgid "This directory needs to be associated to a record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_elements +msgid "Total Elements" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_files +msgid "Total Files" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__count_total_directories +msgid "Total Subdirectories" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.wizard_dms_file_move_form_view +msgid "Total files" +msgstr "" + +#. module: dms +#: model:dms.category,name:dms.category_04_demo +msgid "Traveling" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_file__mimetype +msgid "Type" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__activity_exception_decoration +#: model:ir.model.fields,help:dms.field_dms_file__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_unlink +msgid "Unlink Access" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_file_form +msgid "Unlock" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__alias_process +msgid "Unpack Emails as" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/file_kanban_controller.xml:0 +#: code:addons/dms/static/src/js/views/file_kanban_renderer.xml:0 +#: code:addons/dms/static/src/js/views/file_list_renderer.xml:0 +msgid "Upload" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,button_text:dms.onboarding_step_upload_file +msgid "Upload File" +msgstr "" + +#. module: dms +#: model:onboarding.onboarding.step,description:dms.onboarding_step_upload_file +msgid "Upload your first File." +msgstr "" + +#. module: dms +#: model:dms.access.group,name:dms.access_group_03_demo +#: model:res.groups,name:dms.group_dms_user +msgid "User" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_access_groups_form +msgid "Users" +msgstr "" + +#. module: dms +#: model:dms.tag,name:dms.tag_09_demo +msgid "Vendor Bill" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,field_description:dms.field_dms_file__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: dms +#: model:ir.model.fields,help:dms.field_dms_directory__website_message_ids +#: model:ir.model.fields,help:dms.field_dms_file__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_file_move +msgid "Wizard Dms File Move" +msgstr "" + +#. module: dms +#: model:ir.model,name:dms.model_wizard_dms_share +msgid "Wizard for sharing DMS records" +msgstr "" + +#. module: dms +#: model:ir.model.fields,field_description:dms.field_dms_access_group__perm_write +#: model:ir.model.fields,field_description:dms.field_dms_directory__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_file__permission_write +#: model:ir.model.fields,field_description:dms.field_dms_security_mixin__permission_write +msgid "Write Access" +msgstr "" + +#. module: dms +#. odoo-javascript +#: code:addons/dms/static/src/js/views/dms_file_upload.esm.js:0 +msgid "You must select a directory first" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.portal_my_dms +msgid "element(s)" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.res_config_settings_view_form +msgid "exe,msi" +msgstr "" + +#. module: dms +#: model_terms:ir.ui.view,arch_db:dms.view_dms_directory_form +msgid "mail.catchall.domain" +msgstr "" diff --git a/dms/models/__init__.py b/dms/models/__init__.py new file mode 100644 index 00000000..024566e4 --- /dev/null +++ b/dms/models/__init__.py @@ -0,0 +1,23 @@ +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from . import access_groups +from . import base +from . import mixins_thumbnail +from . import dms_security_mixin +from . import abstract_dms_mixin + +from . import storage +from . import directory +from . import dms_file + +from . import onboarding_onboarding +from . import onboarding_onboarding_step +from . import dms_category +from . import tag + +from . import res_company +from . import res_config_settings +from . import ir_attachment +from . import ir_binary +from . import mail_thread diff --git a/dms/models/abstract_dms_mixin.py b/dms/models/abstract_dms_mixin.py new file mode 100644 index 00000000..a2014587 --- /dev/null +++ b/dms/models/abstract_dms_mixin.py @@ -0,0 +1,57 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class AbstractDmsMixin(models.AbstractModel): + _name = "abstract.dms.mixin" + _description = "Abstract Dms Mixin" + + name = fields.Char(required=True, index="btree") + # Only defined to prevent error in other fields that related it + storage_id = fields.Many2one( + comodel_name="dms.storage", string="Storage", store=True, copy=True + ) + is_hidden = fields.Boolean( + string="Storage is Hidden", + related="storage_id.is_hidden", + readonly=True, + store=True, + ) + company_id = fields.Many2one( + related="storage_id.company_id", + comodel_name="res.company", + string="Company", + readonly=True, + store=True, + index="btree", + ) + storage_id_save_type = fields.Selection(related="storage_id.save_type", store=False) + color = fields.Integer(default=0) + category_id = fields.Many2one( + comodel_name="dms.category", + context={"dms_category_show_path": True}, + string="Category", + ) + + @api.model + def search_panel_select_range(self, field_name, **kwargs): + """Add context to display short folder name.""" + _self = self.with_context( + directory_short_name=True, skip_sanitized_parent_hierarchy=True + ) + return super(AbstractDmsMixin, _self).search_panel_select_range( + field_name, **kwargs + ) + + def _search_panel_sanitized_parent_hierarchy(self, records, parent_name, ids): + if self.env.context.get("skip_sanitized_parent_hierarchy"): + all_ids = [value["id"] for value in records] + # Prevent error if user not access to parent record + for value in records: + if value["parent_id"] and value["parent_id"][0] not in all_ids: + value["parent_id"] = False + return records + return super()._search_panel_sanitized_parent_hierarchy( + records=records, parent_name=parent_name, ids=ids + ) diff --git a/dms/models/access_groups.py b/dms/models/access_groups.py new file mode 100644 index 00000000..fccff0d0 --- /dev/null +++ b/dms/models/access_groups.py @@ -0,0 +1,177 @@ +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2020 RGB Consulting +# Copyright 2024 Timothée Vannier - Subteno (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class DmsAccessGroups(models.Model): + _name = "dms.access.group" + _description = "Record Access Groups" + _parent_store = True + _parent_name = "parent_group_id" + + name = fields.Char(string="Group Name", required=True, translate=True) + parent_path = fields.Char(index="btree") + + # Permissions written directly on this group + perm_create = fields.Boolean(string="Create Access") + perm_write = fields.Boolean(string="Write Access") + perm_unlink = fields.Boolean(string="Unlink Access") + + # Permissions computed including parent group + perm_inclusive_create = fields.Boolean( + string="Inherited Create Access", + compute="_compute_inclusive_permissions", + store=True, + recursive=True, + ) + perm_inclusive_write = fields.Boolean( + string="Inherited Write Access", + compute="_compute_inclusive_permissions", + store=True, + recursive=True, + ) + perm_inclusive_unlink = fields.Boolean( + string="Inherited Unlink Access", + compute="_compute_inclusive_permissions", + store=True, + recursive=True, + ) + + directory_ids = fields.Many2many( + comodel_name="dms.directory", + relation="dms_directory_groups_rel", + string="Directories", + column1="gid", + column2="aid", + auto_join=True, + readonly=True, + ) + complete_directory_ids = fields.Many2many( + comodel_name="dms.directory", + relation="dms_directory_complete_groups_rel", + column1="gid", + column2="aid", + string="Complete directories", + auto_join=True, + readonly=True, + ) + count_users = fields.Integer(compute="_compute_users", store=True) + count_directories = fields.Integer(compute="_compute_count_directories") + parent_group_id = fields.Many2one( + comodel_name="dms.access.group", + string="Parent Group", + ondelete="cascade", + index="btree", + ) + + child_group_ids = fields.One2many( + comodel_name="dms.access.group", + inverse_name="parent_group_id", + string="Child Groups", + ) + group_ids = fields.Many2many( + comodel_name="res.groups", + relation="dms_access_group_groups_rel", + column1="gid", + column2="rid", + string="Groups", + ) + explicit_user_ids = fields.Many2many( + comodel_name="res.users", + relation="dms_access_group_explicit_users_rel", + column1="gid", + column2="uid", + string="Explicit Users", + ) + users = fields.Many2many( + comodel_name="res.users", + relation="dms_access_group_users_rel", + column1="gid", + column2="uid", + string="Group Users", + compute="_compute_users", + auto_join=True, + store=True, + recursive=True, + ) + + @api.depends("directory_ids") + def _compute_count_directories(self): + for record in self: + record.count_directories = len(record.directory_ids) + + _sql_constraints = [ + ("name_uniq", "unique (name)", "The name of the group must be unique!") + ] + + @api.depends( + "parent_group_id.perm_inclusive_create", + "parent_group_id.perm_inclusive_unlink", + "parent_group_id.perm_inclusive_write", + "parent_path", + "perm_create", + "perm_unlink", + "perm_write", + ) + def _compute_inclusive_permissions(self): + """Provide full permissions inheriting from parent recursively.""" + for one in self: + one.update( + { + f"perm_inclusive_{perm}": ( + one[f"perm_{perm}"] + or one.parent_group_id[f"perm_inclusive_{perm}"] + ) + for perm in ("create", "unlink", "write") + } + ) + + @api.model + def default_get(self, fields_list): + res = super().default_get(fields_list) + if res.get("explicit_user_ids"): + res["explicit_user_ids"] = res["explicit_user_ids"] + [self.env.uid] + else: + res["explicit_user_ids"] = [(6, 0, [self.env.uid])] + return res + + @api.depends( + "parent_group_id", + "parent_group_id.users", + "group_ids", + "group_ids.user_ids", + "explicit_user_ids", + ) + def _compute_users(self): + for record in self: + users = ( + record.group_ids.user_ids + | record.explicit_user_ids + | record.parent_group_id.users + ) + record.update({"users": users, "count_users": len(users)}) + + def copy_data(self, default=None): + vals_list = super().copy_data(default) + for group, vals in zip(self, vals_list, strict=False): + vals["name"] = _("%s (copy)") % group.name + return vals_list + + @api.constrains("parent_path") + def _check_parent_recursiveness(self): + """ + Forbid recursive relationships. + """ + for one in self.filtered("parent_group_id"): + if str(one.id) in one.parent_path.split("/"): + raise ValidationError( + _("Parent group '%(parent)s' is child of '%(current)s'.") + % { + "parent": one.parent_group_id.display_name, + "current": one.display_name, + } + ) diff --git a/dms/models/base.py b/dms/models/base.py new file mode 100644 index 00000000..8d47fabc --- /dev/null +++ b/dms/models/base.py @@ -0,0 +1,33 @@ +# Copyright 2021 Tecnativa - Jairo Llopis +# Copyright 2024 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import models + + +class Base(models.AbstractModel): + _inherit = "base" + + def unlink(self): + """Cascade DMS related resources removal. + Avoid executing in ir.* models (ir.mode, ir.model.fields, etc), in transient + models and in the models we want to check.""" + result = super().unlink() + if ( + self.ids + and not self._name.startswith("ir.") + and not self.is_transient() + and self._name not in ("dms.file", "dms.directory") + ): + domain = [("res_model", "=", self._name), ("res_id", "in", self.ids)] + # Has to check if existing before unlinking, because even if the search + # returns an empty recordset, it will still call the unlink method on it. + # This can result in an infinite loop and a recursion depth error. + files = self.env["dms.file"].sudo().search(domain) + if files: + files.unlink() + directories = self.env["dms.directory"].sudo().search(domain) + if directories: + directories.unlink() + return result diff --git a/dms/models/directory.py b/dms/models/directory.py new file mode 100644 index 00000000..34127d2d --- /dev/null +++ b/dms/models/directory.py @@ -0,0 +1,777 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import ast +import base64 +import logging +import os +from ast import literal_eval +from collections import defaultdict +from typing import Literal # noqa # pylint: disable=unused-import + +from odoo import _, api, fields, models, tools +from odoo.exceptions import UserError, ValidationError +from odoo.osv.expression import AND, OR +from odoo.tools import consteq, human_size + +from ..tools.file import check_name, unique_name + +_logger = logging.getLogger(__name__) +_path = os.path.dirname(os.path.dirname(__file__)) + + +class DmsDirectory(models.Model): + _name = "dms.directory" + _description = "Directory" + + _inherit = [ + "portal.mixin", + "dms.security.mixin", + "dms.mixins.thumbnail", + "mail.thread", + "mail.activity.mixin", + "mail.alias.mixin", + "abstract.dms.mixin", + ] + + _rec_name = "complete_name" + _order = "complete_name" + + _parent_store = True + _parent_name = "parent_id" + _directory_field = _parent_name + + parent_path = fields.Char(index="btree") + is_root_directory = fields.Boolean( + default=False, + help="""Indicates if the directory is a root directory. + A root directory has a settings object, while a directory with a set + parent inherits the settings form its parent.""", + ) + + # Override acording to defined in AbstractDmsMixin + storage_id = fields.Many2one( + compute="_compute_storage_id", + compute_sudo=True, + readonly=False, + comodel_name="dms.storage", + string="Storage", + ondelete="restrict", + auto_join=True, + store=True, + ) + parent_id = fields.Many2one( + comodel_name="dms.directory", + string="Parent Directory", + domain="[('permission_create', '=', True)]", + ondelete="restrict", + # Access to a directory doesn't necessarily mean access its parent, so + # prefetching this field could lead to misleading access errors + prefetch=False, + index="btree", + store=True, + readonly=False, + compute="_compute_parent_id", + copy=True, + default=lambda self: self._default_parent_id(), + ) + + root_directory_id = fields.Many2one( + "dms.directory", "Root Directory", compute="_compute_root_id", store=True + ) + + def _default_parent_id(self): + context = self.env.context + if context.get("active_model") == self._name and context.get("active_id"): + return context["active_id"] + else: + return False + + group_ids = fields.Many2many( + comodel_name="dms.access.group", + relation="dms_directory_groups_rel", + column1="aid", + column2="gid", + string="Groups", + ) + complete_group_ids = fields.Many2many( + comodel_name="dms.access.group", + relation="dms_directory_complete_groups_rel", + column1="aid", + column2="gid", + string="Complete Groups", + compute="_compute_groups", + readonly=True, + store=True, + compute_sudo=True, + recursive=True, + ) + complete_name = fields.Char( + compute="_compute_complete_name", store=True, recursive=True + ) + child_directory_ids = fields.One2many( + comodel_name="dms.directory", + inverse_name="parent_id", + string="Subdirectories", + auto_join=False, + copy=True, + ) + + tag_ids = fields.Many2many( + comodel_name="dms.tag", + relation="dms_directory_tag_rel", + domain="""[ + '|', ['category_id', '=', False], + ['category_id', 'child_of', category_id]] + """, + column1="did", + column2="tid", + string="Tags", + compute="_compute_tags", + readonly=False, + store=True, + ) + + user_star_ids = fields.Many2many( + comodel_name="res.users", + relation="dms_directory_star_rel", + column1="did", + column2="uid", + string="Stars", + ) + + starred = fields.Boolean( + compute="_compute_starred", + inverse="_inverse_starred", + search="_search_starred", + ) + + file_ids = fields.One2many( + comodel_name="dms.file", + inverse_name="directory_id", + string="Files", + auto_join=False, + copy=True, + ) + + count_directories = fields.Integer( + compute="_compute_count_directories", string="Count Subdirectories Title" + ) + + count_files = fields.Integer( + compute="_compute_count_files", string="Count Files Title" + ) + + count_directories_title = fields.Char( + compute="_compute_count_directories", string="Count Subdirectories" + ) + + count_files_title = fields.Char( + compute="_compute_count_files", string="Count Files" + ) + + count_elements = fields.Integer(compute="_compute_count_elements") + + count_total_directories = fields.Integer( + compute="_compute_count_total_directories", string="Total Subdirectories" + ) + + count_total_files = fields.Integer( + compute="_compute_count_total_files", string="Total Files" + ) + + count_total_elements = fields.Integer( + compute="_compute_count_total_elements", string="Total Elements" + ) + + size = fields.Float(compute="_compute_size") + human_size = fields.Char( + compute="_compute_human_size", string="Size (human readable)" + ) + + inherit_group_ids = fields.Boolean(string="Inherit Groups", default=True) + + alias_process = fields.Selection( + selection=[("files", "Single Files"), ("directory", "Subdirectory")], + required=True, + default="directory", + string="Unpack Emails as", + help="""\ + Define how incoming emails are processed:\n + - Single Files: The email gets attached to the directory and + all attachments are created as files.\n + - Subdirectory: A new subdirectory is created for each email + and the mail is attached to this subdirectory. The attachments + are created as files of the subdirectory. + """, + ) + + @api.model + def _get_domain_by_access_groups(self, operation): + """Special rules for directories.""" + self_filter = [ + ("storage_id_inherit_access_from_parent_record", "=", False), + ("id", "in", self._get_access_groups_query(operation)), + ] + # Upstream only filters by parent directory + result = super()._get_domain_by_access_groups(operation) + if operation == "create": + # When creating, I need create access in parent directory, or + # self-create permission if it's a root directory + result = OR( + [ + [("is_root_directory", "=", False)] + result, + [("is_root_directory", "=", True)] + self_filter, + ] + ) + else: + # In other operations, I only need self access + result = self_filter + return result + + def _compute_access_url(self): + res = super()._compute_access_url() + for item in self: + item.access_url = f"/my/dms/directory/{item.id}" + return res + + def check_access_token(self, access_token=False): + res = False + if access_token: + items = ( + self.env["dms.directory"] + .sudo() + .search([("access_token", "=", access_token)]) + ) + if items: + item = items[0] + if item.id == self.id: + return True + # sudo because the user might not usually have access to the record but + # now the token is valid. + directory_item = self.sudo() + while directory_item.parent_id: + if directory_item.id == item.id: + return True + directory_item = directory_item.parent_id + # Fix last level + if directory_item.id == item.id: + return True + return res + + @api.model + def _get_parent_categories(self, access_token): + self.ensure_one() + directories = [] + current_directory = self + while current_directory: + directories.insert(0, current_directory) + if ( + ( + access_token + and current_directory.access_token + and consteq(current_directory.access_token, access_token) + ) + or not access_token + and current_directory.check_access("read") + ): + return directories + current_directory = current_directory.parent_id + if access_token: + # Reaching here means we didn't find the directory accessible by this token + return [self] + return directories + + def _get_own_root_directories(self): + res = self.env["dms.directory"].search_read( + [("is_hidden", "=", False)], ["parent_id"] + ) + all_ids = [value["id"] for value in res] + res_ids = [] + for item in res: + if not item["parent_id"] or item["parent_id"][0] not in all_ids: + res_ids.append(item["id"]) + return res_ids + + allowed_model_ids = fields.Many2many( + related="storage_id.model_ids", + comodel_name="ir.model", + ) + model_id = fields.Many2one( + comodel_name="ir.model", + domain="[('id', 'in', allowed_model_ids)]", + compute="_compute_model_id", + inverse="_inverse_model_id", + string="Model", + store=True, + ) + storage_id_save_type = fields.Selection( + related="storage_id.save_type", + related_sudo=True, + readonly=True, + store=False, + prefetch=False, + ) + storage_id_inherit_access_from_parent_record = fields.Boolean( + related="storage_id.inherit_access_from_parent_record", + related_sudo=True, + store=True, + ) + + @api.depends("res_model") + def _compute_model_id(self): + for record in self: + if not record.res_model: + record.model_id = False + continue + record.model_id = ( + self.env["ir.model"].sudo().search([("model", "=", record.res_model)]) + ) + + def _inverse_model_id(self): + for record in self: + record.res_model = record.model_id.model + + def toggle_starred(self): + updates = defaultdict(set) + for record in self: + vals = {"starred": not record.starred} + updates[tools.frozendict(vals)].add(record.id) + for vals, ids in updates.items(): + self.browse(ids).write(dict(vals)) + self.flush_recordset() + + # SearchPanel + @api.model + def search_panel_select_range(self, field_name, **kwargs): + context = {} + if field_name == "parent_id": + context["directory_short_name"] = True + return super( + DmsDirectory, self.with_context(**context) + ).search_panel_select_range(field_name, **kwargs) + + @api.model + def search_panel_select_multi_range(self, field_name, **kwargs): + return super( + DmsDirectory, self.with_context(category_short_name=True) + ).search_panel_select_multi_range(field_name, **kwargs) + + # Actions + def action_save_onboarding_directory_step(self): + self.env.user.company_id.set_onboarding_step_done( + "documents_onboarding_directory_state" + ) + + # SearchPanel + @api.model + def _search_panel_directory(self, **kwargs): + search_domain = (kwargs.get("search_domain", []),) + if search_domain and len(search_domain): + for domain in search_domain[0]: + if domain[0] == "parent_id": + return domain[1], domain[2] + return None, None + + # Search + @api.model + def _search_starred(self, operator, operand): + if operator == "=" and operand: + return [("user_star_ids", "in", [self.env.uid])] + return [("user_star_ids", "not in", [self.env.uid])] + + @api.depends("name", "parent_id.complete_name") + def _compute_complete_name(self): + for category in self: + if category.parent_id: + category.complete_name = ( + f"{category.parent_id.complete_name} / {category.name}" + ) + else: + category.complete_name = category.name + + @api.depends("parent_id") + def _compute_storage_id(self): + for record in self: + if record.parent_id: + record.storage_id = record.parent_id.storage_id + else: + # HACK: Not needed in v14 due to odoo/odoo#64359 + record.storage_id = record.storage_id + + @api.depends("user_star_ids") + def _compute_starred(self): + for record in self: + record.starred = self.env.user in record.user_star_ids + + @api.depends("child_directory_ids") + def _compute_count_directories(self): + for record in self: + directories = len(record.child_directory_ids) + record.count_directories = directories + record.count_directories_title = _("%s Subdirectories") % directories + + @api.depends("file_ids") + def _compute_count_files(self): + for record in self: + files = len(record.file_ids) + record.count_files = files + record.count_files_title = _("%s Files") % files + + @api.depends("child_directory_ids", "file_ids") + def _compute_count_elements(self): + for record in self: + record.count_elements = record.count_files + record.count_directories + + def _compute_count_total_directories(self): + for record in self: + count = ( + self.search_count([("id", "child_of", record.id)]) if record.id else 0 + ) + record.count_total_directories = count - 1 if count > 0 else 0 + + def _compute_count_total_files(self): + model = self.env["dms.file"] + for record in self: + # Prevent error in some NewId cases + record.count_total_files = ( + model.search_count([("directory_id", "child_of", record.id)]) + if record.id + else 0 + ) + + def _compute_count_total_elements(self): + for record in self: + record.count_total_elements = ( + record.count_total_files + record.count_total_directories + ) + + def _compute_size(self): + sudo_model = self.env["dms.file"].sudo() + for record in self: + # Avoid NewId + if not record.id: + record.size = 0 + continue + recs = sudo_model.search_read( + domain=[("directory_id", "child_of", record.id)], + fields=["size"], + ) + record.size = sum(rec.get("size", 0) for rec in recs) + + @api.depends("size") + def _compute_human_size(self): + for item in self: + item.human_size = human_size(item.size) if item.size else False + + @api.depends( + "group_ids", + "inherit_group_ids", + "parent_id.complete_group_ids", + "parent_path", + ) + def _compute_groups(self): + """Get all DMS security groups affecting this directory.""" + for one in self: + groups = one.group_ids + if one.inherit_group_ids: + groups |= one.parent_id.complete_group_ids + self.complete_group_ids = groups + + # View + @api.depends("is_root_directory") + def _compute_parent_id(self): + for record in self: + if record.is_root_directory: + record.parent_id = None + else: + # HACK: Not needed in v14 due to odoo/odoo#64359 + record.parent_id = record.parent_id + + @api.depends("is_root_directory", "parent_id") + def _compute_root_id(self): + for record in self: + if record.is_root_directory: + record.root_directory_id = record + else: + # recursively check all parent nodes up to the root directory + if not record.parent_id.root_directory_id: + record.parent_id._compute_root_id() + record.root_directory_id = record.parent_id.root_directory_id + + @api.depends("category_id") + def _compute_tags(self): + for record in self: + tags = record.tag_ids.filtered( + lambda rec, record=record: not rec.category_id + or rec.category_id == record.category_id + ) + record.tag_ids = tags + + @api.onchange("storage_id") + def _onchange_storage_id(self): + for record in self: + if ( + record.storage_id.save_type == "attachment" + and record.storage_id.inherit_access_from_parent_record + ): + record.group_ids = False + + @api.onchange("model_id") + def _onchange_model_id(self): + self._inverse_model_id() + + # Constrains + @api.constrains("parent_id") + def _check_directory_recursion(self): + if self._has_cycle(): + raise ValidationError(_("Error! You cannot create recursive directories.")) + return True + + @api.constrains("storage_id", "model_id") + def _check_storage_id_attachment_model_id(self): + for record in self.filtered( + lambda directory: directory.storage_id.save_type == "attachment" + ): + if not record.model_id: + raise ValidationError( + _("A directory has to have model in attachment storage.") + ) + if not record.is_root_directory and not record.res_id: + raise ValidationError( + _("This directory needs to be associated to a record.") + ) + + @api.constrains("is_root_directory", "storage_id") + def _check_directory_storage(self): + for record in self: + if record.is_root_directory and not record.storage_id: + raise ValidationError(_("A root directory has to have a storage.")) + + @api.constrains("is_root_directory", "parent_id") + def _check_directory_parent(self): + for record in self: + if record.is_root_directory and record.parent_id: + raise ValidationError( + _("A directory can't be a root and have a parent directory.") + ) + if not record.is_root_directory and not record.parent_id: + raise ValidationError(_("A directory has to have a parent directory.")) + + @api.constrains("name") + def _check_name(self): + for record in self: + if self.env.context.get("check_name", True) and not check_name(record.name): + raise ValidationError(_("The directory name is invalid.")) + if record.is_root_directory: + children = record.sudo().storage_id.root_directory_ids + else: + children = record.sudo().parent_id.child_directory_ids + + if children.filtered( + lambda child, record=record: child.name == record.name + and child != record + ): + raise ValidationError( + _("A directory with the same name already exists.") + ) + + # Create, Update, Delete + def _inverse_starred(self): + starred_records = self.env["dms.directory"].sudo() + not_starred_records = self.env["dms.directory"].sudo() + for record in self: + if not record.starred and self.env.user in record.user_star_ids: + starred_records |= record + elif record.starred and self.env.user not in record.user_star_ids: + not_starred_records |= record + not_starred_records.write({"user_star_ids": [(4, self.env.uid)]}) + starred_records.write({"user_star_ids": [(3, self.env.uid)]}) + + def copy_data(self, default=None): + vals_list = super().copy_data(default) + for directory, vals in zip(self, vals_list, strict=False): + if vals.get("parent_id"): + parent_directory = self.browse(vals.get("parent_id")) + names = parent_directory.sudo().child_directory_ids.mapped("name") + elif directory.is_root_directory: + names = self.sudo().storage_id.root_directory_ids.mapped("name") + else: + names = self.sudo().parent_id.child_directory_ids.mapped("name") + vals["name"] = unique_name(directory.name, names) + return vals_list + + def _alias_get_creation_values(self): + values = super()._alias_get_creation_values() + values["alias_model_id"] = self.env["ir.model"].sudo()._get("dms.directory").id + if self.id: + values["alias_defaults"] = defaults = ast.literal_eval( + self.alias_defaults or "{}" + ) + defaults["parent_id"] = self.id + return values + + @api.model + def message_new(self, msg_dict, custom_values=None): + custom_values = custom_values if custom_values is not None else {} + parent_directory_id = custom_values.get("parent_id") + parent_directory = self.sudo().browse(parent_directory_id) + if not parent_directory_id or not parent_directory.exists(): + raise ValueError("No directory could be found!") + if parent_directory.alias_process == "files": + parent_directory._process_message(msg_dict) + return parent_directory + names = parent_directory.child_directory_ids.mapped("name") + slug = self.env["ir.http"]._slug + subject = slug(msg_dict.get("subject", _("Alias-Mail-Extraction"))) + defaults = dict( + {"name": unique_name(subject, names, escape_suffix=True)}, **custom_values + ) + directory = super().message_new(msg_dict, custom_values=defaults) + directory._process_message(msg_dict) + return directory + + def message_update(self, msg_dict, update_vals=None): + self._process_message(msg_dict, extra_values=update_vals) + return super().message_update(msg_dict, update_vals=update_vals) + + def _process_message(self, msg_dict, extra_values=False): + names = self.sudo().file_ids.mapped("name") + for attachment in msg_dict["attachments"]: + uname = unique_name(attachment.fname, names, escape_suffix=True) + vals = { + "directory_id": self.id, + "name": uname, + } + try: + vals["content"] = base64.b64encode(attachment.content) + except Exception: + vals["content"] = attachment.content + self.env["dms.file"].sudo().create(vals) + names.append(uname) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if vals.get("parent_id", False): + parent = self.browse([vals["parent_id"]]) + data = next(iter(parent.sudo().read(["storage_id"])), {}) + vals["storage_id"] = self._convert_to_write(data).get("storage_id") + # Hack to prevent error related to mail_message parent not exists in some cases + ctx = dict(self.env.context).copy() + ctx.update({"default_parent_id": False}) + self.env.registry.clear_cache() + res = super(DmsDirectory, self.with_context(**ctx)).create(vals_list) + return res + + def write(self, vals): + if any(k in vals.keys() for k in ["storage_id", "parent_id"]): + for item in self: + new_storage_id = vals.get("storage_id", item.storage_id.id) + new_parent_id = vals.get("parent_id", item.parent_id.id) + old_storage_id = ( + item.storage_id or item.root_directory_id.storage_id + ).id + if new_parent_id: + if old_storage_id != self.browse(new_parent_id).storage_id.id: + raise UserError( + _( + "It is not possible to change to a parent " + "with other storage." + ) + ) + elif old_storage_id != new_storage_id: + raise UserError(_("It is not possible to change the storage.")) + # Groups part + if any(key in vals for key in ["group_ids", "inherit_group_ids"]): + res = super().write(vals) + domain = [("id", "child_of", self.ids)] + records = self.sudo().search(domain) + records.modified(["group_ids"]) + records.flush_recordset() + else: + res = super().write(vals) + return res + + @api.depends_context("directory_short_name") + def _compute_display_name(self): + if self.env.context.get("directory_short_name"): + for item in self: + item.display_name = item.name + else: + return super()._compute_display_name() + + def unlink(self): + """Custom cascade unlink. + + Cannot rely on DB backend's cascade because subfolder and subfile unlinks + must check custom permissions implementation. + """ + self.file_ids.unlink() + if self.child_directory_ids: + self.child_directory_ids.unlink() + return super(DmsDirectory, self.exists()).unlink() + + @api.model + def _search_panel_domain_image( + self, field_name, domain, set_count=False, limit=False + ): + """We need to overwrite function from directories because odoo only return + records with children (very weird for user perspective). + All records are returned now. + """ + if field_name == "parent_id": + res = {} + for item in self.search_read( + domain=domain, fields=["id", "name", "count_directories"] + ): + res[item["id"]] = { + "id": item["id"], + "display_name": item["name"], + "__count": item["count_directories"], + } + return res + return super()._search_panel_domain_image( + field_name=field_name, domain=domain, set_count=set_count, limit=limit + ) + + def action_dms_directories_all_directory(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "dms.action_dms_directory" + ) + domain = AND( + [ + literal_eval(action["domain"].strip()), + [("parent_id", "child_of", self.id)], + ] + ) + action["display_name"] = self.name + action["domain"] = domain + action["context"] = dict( + self.env.context, + default_parent_id=self.id, + searchpanel_default_parent_id=self.id, + ) + return action + + def action_dms_files_all_directory(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id("dms.action_dms_file") + domain = AND( + [ + literal_eval(action["domain"].strip()), + [("directory_id", "child_of", self.id)], + ] + ) + action["display_name"] = self.name + action["domain"] = domain + action["context"] = dict( + self.env.context, + default_directory_id=self.id, + searchpanel_default_directory_id=self.id, + ) + return action diff --git a/dms/models/dms_category.py b/dms/models/dms_category.py new file mode 100644 index 00000000..5900f4d9 --- /dev/null +++ b/dms/models/dms_category.py @@ -0,0 +1,104 @@ +# Copyright 2020 Creu Blanca +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class DMSCategory(models.Model): + _name = "dms.category" + _description = "Document Category" + + _parent_store = True + _parent_name = "parent_id" + + _order = "complete_name asc" + _rec_name = "complete_name" + + name = fields.Char(required=True, translate=True) + active = fields.Boolean( + default=True, + help="The active field allows you to hide the category without removing it.", + ) + complete_name = fields.Char( + compute="_compute_complete_name", store=True, recursive=True + ) + parent_id = fields.Many2one( + string="Parent Category", + comodel_name="dms.category", + ondelete="cascade", + index="btree", + ) + child_category_ids = fields.One2many( + string="Child Categories", + comodel_name="dms.category", + inverse_name="parent_id", + ) + parent_path = fields.Char(index="btree") + tag_ids = fields.One2many( + string="Tags", comodel_name="dms.tag", inverse_name="category_id" + ) + directory_ids = fields.One2many( + string="Directories", + comodel_name="dms.directory", + inverse_name="category_id", + readonly=True, + ) + file_ids = fields.One2many( + string="Files", + comodel_name="dms.file", + inverse_name="category_id", + readonly=True, + ) + count_categories = fields.Integer( + string="Count Subcategories", compute="_compute_count_categories" + ) + count_tags = fields.Integer(compute="_compute_count_tags") + count_directories = fields.Integer(compute="_compute_count_directories") + count_files = fields.Integer(compute="_compute_count_files") + + _sql_constraints = [ + ("name_uniq", "unique (name)", "Category name already exists!"), + ] + + @api.depends("name", "parent_id.complete_name") + def _compute_complete_name(self): + for category in self: + if category.parent_id: + category.complete_name = ( + f"{category.parent_id.complete_name} / {category.name}" + ) + else: + category.complete_name = category.name + + @api.depends("child_category_ids") + def _compute_count_categories(self): + for record in self: + record.count_categories = len(record.child_category_ids) + + @api.depends("tag_ids") + def _compute_count_tags(self): + for record in self: + record.count_tags = len(record.tag_ids) + + @api.depends("directory_ids") + def _compute_count_directories(self): + for record in self: + record.count_directories = len(record.directory_ids) + + @api.depends("file_ids") + def _compute_count_files(self): + for record in self: + record.count_files = len(record.file_ids) + + @api.constrains("parent_id") + def _check_category_recursion(self): + if self._has_cycle(): + raise ValidationError(_("Error! You cannot create recursive categories.")) + return True diff --git a/dms/models/dms_file.py b/dms/models/dms_file.py new file mode 100644 index 00000000..328ebb43 --- /dev/null +++ b/dms/models/dms_file.py @@ -0,0 +1,668 @@ +# Copyright 2020 Antoni Romera +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2021 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import base64 +import hashlib +import json +import logging +from collections import defaultdict + +from PIL import Image + +from odoo import _, api, fields, models, tools +from odoo.exceptions import UserError, ValidationError +from odoo.osv import expression +from odoo.tools import consteq, human_size +from odoo.tools.mimetypes import guess_mimetype + +from ..tools import file + +_logger = logging.getLogger(__name__) + + +class DMSFile(models.Model): + _name = "dms.file" + _description = "File" + + _inherit = [ + "portal.mixin", + "dms.security.mixin", + "dms.mixins.thumbnail", + "mail.thread", + "mail.activity.mixin", + "abstract.dms.mixin", + ] + + _order = "name asc" + + # Database + active = fields.Boolean( + string="Archived", + default=True, + help="If a file is set to archived, it is not displayed, but still exists.", + ) + directory_id = fields.Many2one( + comodel_name="dms.directory", + string="Directory", + domain="[('permission_create', '=', True)]", + context={"dms_directory_show_path": True}, + ondelete="restrict", + auto_join=True, + required=True, + index="btree", + tracking=True, # Leave log if "moved" to another directory + ) + root_directory_id = fields.Many2one(related="directory_id.root_directory_id") + # Override acording to defined in AbstractDmsMixin + storage_id = fields.Many2one( + related="directory_id.storage_id", + readonly=True, + prefetch=False, + ) + + path_names = fields.Char( + compute="_compute_path", + compute_sudo=True, + readonly=True, + store=False, + ) + + path_json = fields.Text( + compute="_compute_path", + compute_sudo=True, + readonly=True, + store=False, + ) + + tag_ids = fields.Many2many( + comodel_name="dms.tag", + relation="dms_file_tag_rel", + column1="fid", + column2="tid", + domain="['|', ('category_id', '=', False),('category_id', '=?', category_id)]", + string="Tags", + ) + + content = fields.Binary( + compute="_compute_content", + inverse="_inverse_content", + attachment=False, + prefetch=False, + required=True, + store=False, + ) + + extension = fields.Char(compute="_compute_extension", readonly=True, store=True) + + mimetype = fields.Char( + compute="_compute_mimetype", string="Type", readonly=True, store=True + ) + + size = fields.Float(readonly=True) + human_size = fields.Char( + readonly=True, + string="Size (human readable)", + compute="_compute_human_size", + store=True, + ) + + checksum = fields.Char(string="Checksum/SHA1", readonly=True, index="btree") + + content_binary = fields.Binary(attachment=False, prefetch=False) + + save_type = fields.Char( + compute="_compute_save_type", + string="Current Save Type", + prefetch=False, + ) + + migration = fields.Char( + compute="_compute_migration", + string="Migration Status", + readonly=True, + prefetch=False, + compute_sudo=True, + store=True, + ) + require_migration = fields.Boolean( + compute="_compute_migration", store=True, compute_sudo=True + ) + content_file = fields.Binary(attachment=True, prefetch=False) + + # Extend inherited field(s) + image_1920 = fields.Image(compute="_compute_image_1920", store=True, readonly=False) + + @api.depends("mimetype", "content") + def _compute_image_1920(self): + """Provide thumbnail automatically if possible.""" + for one in self.filtered("mimetype"): + # Image.MIME provides a dict of mimetypes supported by Pillow, + # SVG is not present in the dict but is also a supported image format + # lacking a better solution, it's being added manually + # Some component modifies the PIL dictionary by adding PDF as a valid + # image type, so it must be explicitly excluded. + if one.mimetype != "application/pdf" and one.mimetype in ( + *Image.MIME.values(), + "image/svg+xml", + ): + one.image_1920 = one.content + + def check_access(self, operation): + self.mapped("directory_id").check_access(operation) + return super().check_access(operation) + + def _compute_access_url(self): + res = super()._compute_access_url() + for item in self: + item.access_url = f"/my/dms/file/{item.id}/download" + return res + + def check_access_token(self, access_token=False): + if not access_token: + return False + + if self.access_token and consteq(self.access_token, access_token): + return True + + items = ( + self.env["dms.directory"] + .sudo() + .search([("access_token", "=", access_token)]) + ) + if items: + item = items[0] + if self.directory_id.id == item.id: + return True + directory_item = self.directory_id + while directory_item.parent_id: + if directory_item.id == self.directory_id.id: + return True + directory_item = directory_item.parent_id + # Fix last level + if directory_item.id == self.directory_id.id: + return True + return False + + res_model = fields.Char( + string="Linked attachments model", related="directory_id.res_model" + ) + res_id = fields.Integer( + string="Linked attachments record ID", related="directory_id.res_id" + ) + attachment_id = fields.Many2one( + comodel_name="ir.attachment", + string="Attachment File", + prefetch=False, + ondelete="cascade", + index=True, + ) + + def get_human_size(self): + return human_size(self.size) + + # Helper + @api.model + def _get_checksum(self, binary): + return hashlib.sha1(binary or b"").hexdigest() + + @api.model + def _get_content_inital_vals(self): + return {"content_binary": False, "content_file": False} + + def _update_content_vals(self, vals, binary): + new_vals = vals.copy() + new_vals.update( + { + "checksum": self._get_checksum(binary), + "size": binary and len(binary) or 0, + } + ) + if self.storage_id.save_type in ["file", "attachment"]: + new_vals["content_file"] = self.content + else: + new_vals["content_binary"] = self.content and binary + return new_vals + + @api.model + def _get_binary_max_size(self): + return int( + self.env["ir.config_parameter"] + .sudo() + .get_param("dms.binary_max_size", default=25) + ) + + @api.model + def _get_forbidden_extensions(self): + get_param = self.env["ir.config_parameter"].sudo().get_param + extensions = get_param("dms.forbidden_extensions", default="") + return [extension.strip() for extension in extensions.split(",")] + + def _get_icon_placeholder_name(self): + return self.extension and f"file_{self.extension}.svg" or "" + + # Actions + def action_migrate(self, should_logging=True): + record_count = len(self) + index = 1 + for dms_file in self: + if should_logging: + _logger.info( + _( + "Migrate File %(index)s of %(record_count)s [ %(" + "dms_file_migration)s ]", + index=index, + record_count=record_count, + dms_file_migration=dms_file.migration, + ) + ) + index += 1 + dms_file.write( + { + "content": dms_file.with_context(**{}).content, + "storage_id": dms_file.directory_id.storage_id.id, + } + ) + + def action_save_onboarding_file_step(self): + self.env.user.company_id.set_onboarding_step_done( + "documents_onboarding_file_state" + ) + + def action_wizard_dms_file_move(self): + items = self.browse(self.env.context.get("active_ids")) + root_directories = items.mapped("root_directory_id") + if len(root_directories) > 1: + raise UserError(_("Only files in the same root directory can be moved.")) + result = self.env["ir.actions.act_window"]._for_xml_id( + "dms.wizard_dms_file_move_act_window" + ) + result["context"] = dict(self.env.context) + return result + + # SearchPanel + @api.model + def _search_panel_directory(self, **kwargs): + search_domain = (kwargs.get("search_domain", []),) + category_domain = kwargs.get("category_domain", []) + if category_domain and len(category_domain): + return "=", category_domain[0][2] + if search_domain and len(search_domain): + for domain in search_domain[0]: + if domain[0] == "directory_id": + return domain[1], domain[2] + return None, None + + @api.model + def _search_panel_domain(self, field, operator, directory_id, comodel_domain=False): + if not comodel_domain: + comodel_domain = [] + files_ids = self.search([("directory_id", operator, directory_id)]).ids + return expression.AND([comodel_domain, [(field, "in", files_ids)]]) + + @api.model + def search_panel_select_range(self, field_name, **kwargs): + """This method is overwritten to make it 'similar' to v13. + The goal is that the directory searchpanel shows all directories + (even if some folders have no files). + """ + if field_name != "directory_id": + context = {} + if field_name == "category_id": + context["category_short_name"] = True + return super( + DMSFile, self.with_context(**context) + ).search_panel_select_range(field_name, **kwargs) + + domain = [("is_hidden", "=", False)] + # If we pass by context something, we filter more about it we filter + # the directories of the files, or we show all of them + if self.env.context.get("active_model") == "dms.directory": + active_id = self.env.context.get("active_id") + files = self.env["dms.file"].search( + [("directory_id", "child_of", active_id)] + ) + all_directory_ids = [] + for file_record in files: + directory = file_record.directory_id + while directory: + all_directory_ids.append(directory.id) + directory = directory.parent_id + domain.append(("id", "in", all_directory_ids)) + # Get all possible directories + comodel_records = ( + self.env["dms.directory"] + .with_context(directory_short_name=True) + .search_read(domain, ["display_name", "parent_id"]) + ) + all_record_ids = [rec["id"] for rec in comodel_records] + field_range = {} + enable_counters = kwargs.get("enable_counters") + for record in comodel_records: + record_id = record["id"] + parent = record["parent_id"] + record_values = { + "id": record_id, + "display_name": record["display_name"], + # If the parent directory is not in all the records we should not + # set parent_id because the user does not have access to parent. + "parent_id": ( + parent[0] if parent and parent[0] in all_record_ids else False + ), + } + if enable_counters: + record_values["__count"] = 0 + field_range[record_id] = record_values + if enable_counters: + res = super().search_panel_select_range(field_name, **kwargs) + for item in res["values"]: + if item["id"] in field_range: + field_range[item["id"]]["__count"] = item["__count"] + return {"parent_field": "parent_id", "values": list(field_range.values())} + + @api.model + def search_panel_select_multi_range(self, field_name, **kwargs): + operator, directory_id = self._search_panel_directory(**kwargs) + if field_name == "tag_ids": + sql_query = """ + SELECT t.name AS name, t.id AS id, c.name AS group_name, + c.id AS group_id, COUNT(r.fid) AS count + FROM dms_tag t + JOIN dms_category c ON t.category_id = c.id + LEFT JOIN dms_file_tag_rel r ON t.id = r.tid + WHERE %(filter_by_file_ids)s IS FALSE OR r.fid = ANY(%(file_ids)s) + GROUP BY c.name, c.id, t.name, t.id + ORDER BY c.name, c.id, t.name, t.id; + """ + file_ids = [] + if directory_id: + file_ids = self.search([("directory_id", operator, directory_id)]).ids + self.env.cr.execute( + sql_query, + {"file_ids": file_ids, "filter_by_file_ids": bool(directory_id)}, + ) + return self.env.cr.dictfetchall() + if directory_id and field_name in ["directory_id", "category_id"]: + comodel_domain = kwargs.pop("comodel_domain", []) + directory_comodel_domain = self._search_panel_domain( + "file_ids", operator, directory_id, comodel_domain + ) + return super( + DMSFile, self.with_context(directory_short_name=True) + ).search_panel_select_multi_range( + field_name, comodel_domain=directory_comodel_domain, **kwargs + ) + return super( + DMSFile, self.with_context(directory_short_name=True) + ).search_panel_select_multi_range(field_name, **kwargs) + + # Read + @api.depends("name", "directory_id", "directory_id.parent_path") + def _compute_path(self): + model = self.env["dms.directory"] + for record in self: + path_names = [record.display_name] + path_json = [ + { + "model": record._name, + "name": record.display_name, + "id": isinstance(record.id, int) and record.id or 0, + } + ] + current_dir = record.directory_id + while current_dir: + path_names.insert(0, current_dir.name) + path_json.insert( + 0, + { + "model": model._name, + "name": current_dir.name, + "id": current_dir._origin.id, + }, + ) + current_dir = current_dir.parent_id + record.update( + { + "path_names": "/".join(path_names) if all(path_names) else "", + "path_json": json.dumps(path_json), + } + ) + + @api.depends("name", "mimetype", "content") + def _compute_extension(self): + for record in self: + record.extension = file.guess_extension( + record.name, record.mimetype, record.content + ) + + @api.depends("content") + def _compute_mimetype(self): + for record in self: + binary = base64.b64decode(record.content or "") + record.mimetype = guess_mimetype(binary) + + @api.depends("size") + def _compute_human_size(self): + for item in self: + item.human_size = human_size(item.size) + + @api.depends("content_binary", "content_file", "attachment_id") + def _compute_content(self): + bin_size = self.env.context.get("bin_size", False) + for record in self: + if record.content_file: + context = {"human_size": True} if bin_size else {"base64": True} + record.content = record.with_context(**context).content_file + elif record.content_binary: + record.content = ( + record.content_binary + if bin_size + else base64.b64encode(record.content_binary) + ) + elif record.attachment_id: + context = {"human_size": True} if bin_size else {"base64": True} + record.content = record.with_context(**context).attachment_id.datas + + @api.depends("content_binary", "content_file") + def _compute_save_type(self): + for record in self: + if record.content_file: + record.save_type = "file" + else: + record.save_type = "database" + + @api.depends("storage_id", "storage_id.save_type") + def _compute_migration(self): + storage_model = self.env["dms.storage"] + save_field = storage_model._fields["save_type"] + values = save_field._description_selection(self.env) + selection = {value[0]: value[1] for value in values} + for record in self: + storage_type = record.storage_id.save_type + if storage_type == "attachment" or storage_type == record.save_type: + record.migration = selection.get(storage_type) + record.require_migration = False + else: + storage_label = selection.get(storage_type) + file_label = selection.get(record.save_type) + record.migration = f"{file_label} > {storage_label}" + record.require_migration = True + + # View + @api.onchange("category_id") + def _change_category(self): + self.tag_ids = self.tag_ids.filtered( + lambda rec: not rec.category_id or rec.category_id == self.category_id + ) + + # Constrains + @api.constrains("storage_id", "res_model", "res_id") + def _check_storage_id_attachment_res_model(self): + for record in self: + if record.storage_id.save_type == "attachment" and not ( + record.res_model and record.res_id + ): + raise ValidationError( + _("A file must have model and resource ID in attachment storage.") + ) + + @api.constrains("name") + def _check_name(self): + for record in self: + if not file.check_name(record.name): + raise ValidationError(_("The file name is invalid.")) + files = record.sudo().directory_id.file_ids + if files.filtered( + lambda file, record=record: file.name == record.name and file != record + ): + raise ValidationError( + _("A file with the same name already exists in this directory.") + ) + + @api.constrains("extension") + def _check_extension(self): + if self.filtered( + lambda rec: rec.extension + and rec.extension in self._get_forbidden_extensions() + ): + raise ValidationError(_("The file has a forbidden file extension.")) + + @api.constrains("size") + def _check_size(self): + if self.filtered( + lambda rec: rec.size > self._get_binary_max_size() * 1024 * 1024 + ): + raise ValidationError( + _("The maximum upload size is %s MB.") % self._get_binary_max_size() + ) + + # Create, Update, Delete + def _inverse_content(self): + updates = defaultdict(set) + for record in self: + values = self._get_content_inital_vals() + binary = base64.b64decode(record.content or "") + values = record._update_content_vals(values, binary) + updates[tools.frozendict(values)].add(record.id) + for vals, ids in updates.items(): + self.browse(ids).write(dict(vals)) + + def _create_model_attachment(self, vals): + res_vals = vals.copy() + directory_id = False + if "directory_id" in res_vals: + directory_id = res_vals["directory_id"] + elif self.env.context.get("active_id"): + directory_id = self.env.context.get("active_id") + elif self.env.context.get("default_directory_id"): + directory_id = self.env.context.get("default_directory_id") + directory = self.env["dms.directory"].browse(directory_id) + if ( + directory.res_model + and directory.res_id + and directory.storage_id_save_type == "attachment" + ): + attachment = ( + self.env["ir.attachment"] + .with_context(dms_file=True) + .create( + { + "name": vals["name"], + "datas": vals["content"], + "res_model": directory.res_model, + "res_id": directory.res_id, + } + ) + ) + res_vals["attachment_id"] = attachment.id + res_vals["res_model"] = attachment.res_model + res_vals["res_id"] = attachment.res_id + del res_vals["content"] + return res_vals + + def copy_data(self, default=None): + vals_list = super().copy_data(default) + for dms_file, vals in zip(self, vals_list, strict=False): + if vals.get("directory_id"): + directory = self.env["dms.directory"].browse(vals.get("directory_id")) + names = directory.sudo().file_ids.mapped("name") + else: + names = dms_file.sudo().directory_id.file_ids.mapped("name") + vals["name"] = file.unique_name(dms_file.name, names, dms_file.extension) + return vals_list + + @api.model_create_multi + def create(self, vals_list): + new_vals_list = [] + for vals in vals_list: + if "attachment_id" not in vals: + vals = self._create_model_attachment(vals) + new_vals_list.append(vals) + return super().create(new_vals_list) + + def unlink(self): + attachments = self.mapped("attachment_id") + res = super().unlink() + if not self.env.context.get("dms_file"): + attachments.with_context(dms_file=True).unlink() + return res + + # ---------------------------------------------------------- + # Locking fields and functions + locked_by = fields.Many2one(comodel_name="res.users") + + is_locked = fields.Boolean(compute="_compute_locked", string="Locked") + + is_lock_editor = fields.Boolean(compute="_compute_locked", string="Editor") + + # ---------------------------------------------------------- + # Locking + # ---------------------------------------------------------- + + def lock(self): + self.write({"locked_by": self.env.uid}) + + def unlock(self): + self.write({"locked_by": None}) + + # Read, View + @api.depends("locked_by") + def _compute_locked(self): + for record in self: + if record.locked_by.exists(): + record.update( + { + "is_locked": True, + "is_lock_editor": record.locked_by.id == record.env.uid, + } + ) + else: + record.update({"is_locked": False, "is_lock_editor": False}) + + def get_attachment_object(self, attachment): + return { + "name": attachment.name, + "datas": attachment.datas, + "res_model": attachment.res_model, + "mimetype": attachment.mimetype, + } + + @api.model + def get_dms_files_from_attachments(self, attachment_ids=None): + """Get the dms files from uploaded attachments. + :return: An Array of dms files. + """ + if not attachment_ids: + raise UserError(_("No attachment was provided")) + + attachments = self.env["ir.attachment"].browse(attachment_ids) + + if any( + attachment.res_id or attachment.res_model != "dms.file" + for attachment in attachments + ): + raise UserError(_("Invalid attachments!")) + + return [self.get_attachment_object(attachment) for attachment in attachments] diff --git a/dms/models/dms_security_mixin.py b/dms/models/dms_security_mixin.py new file mode 100644 index 00000000..fb96ec0c --- /dev/null +++ b/dms/models/dms_security_mixin.py @@ -0,0 +1,308 @@ +# Copyright 2020 Creu Blanca +# Copyright 2021-2025 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from logging import getLogger + +from odoo import api, fields, models +from odoo.exceptions import AccessError +from odoo.osv.expression import ( + FALSE_DOMAIN, + NEGATIVE_TERM_OPERATORS, + OR, + TRUE_DOMAIN, +) +from odoo.tools import SQL + +_logger = getLogger(__name__) + + +class DmsSecurityMixin(models.AbstractModel): + _name = "dms.security.mixin" + _description = "DMS Security Mixin" + + # Submodels must define this field that points to the owner dms.directory + _directory_field = "directory_id" + + res_model = fields.Char( + string="Linked attachments model", index="btree", store=True + ) + res_id = fields.Integer( + string="Linked attachments record ID", index="btree", store=True + ) + record_ref = fields.Reference( + string="Record Referenced", + compute="_compute_record_ref", + selection=lambda self: self._get_ref_selection(), + ) + permission_read = fields.Boolean( + compute="_compute_permissions", + search="_search_permission_read", + string="Read Access", + ) + permission_create = fields.Boolean( + compute="_compute_permissions", + search="_search_permission_create", + string="Create Access", + ) + permission_write = fields.Boolean( + compute="_compute_permissions", + search="_search_permission_write", + string="Write Access", + ) + permission_unlink = fields.Boolean( + compute="_compute_permissions", + search="_search_permission_unlink", + string="Delete Access", + ) + + @api.model + def _get_ref_selection(self): + models = self.env["ir.model"].sudo().search([]) + return [(model.model, model.name) for model in models] + + @api.depends("res_model", "res_id") + def _compute_record_ref(self): + for record in self: + record.record_ref = False + if record.res_model and record.res_id: + record.record_ref = f"{record.res_model},{record.res_id}" + + def _compute_permissions(self): + """ + Get permissions for the current record. + """ + + # Update according to presence when applying ir.rule + self.invalidate_recordset() + if self.env.su: + self.update( + { + "permission_create": True, + "permission_read": True, + "permission_unlink": True, + "permission_write": True, + } + ) + return + + creatable = self._filtered_access("create") + readable = self._filtered_access("read") + unlinkable = self._filtered_access("unlink") + writeable = self._filtered_access("write") + for one in self: + one.update( + { + "permission_create": bool(one & creatable), + "permission_read": bool(one & readable), + "permission_unlink": bool(one & unlinkable), + "permission_write": bool(one & writeable), + } + ) + + @api.model + def _get_domain_by_inheritance(self, operation): + """Get domain for inherited accessible records.""" + if self.env.su: + return [] + inherited_access_field = "storage_id_inherit_access_from_parent_record" + if self._name != "dms.directory": + inherited_access_field = f"{self._directory_field}.{inherited_access_field}" + inherited_access_domain = [ + ("storage_id_save_type", "=", "attachment"), + (inherited_access_field, "=", True), + ] + domains = [] + # Get all used related records + related_groups = self.sudo().read_group( + domain=inherited_access_domain + [("res_model", "!=", False)], + fields=["res_id:array_agg"], + groupby=["res_model"], + ) + for group in related_groups: + try: + model = self.env[group["res_model"]] + except KeyError: + # The model might not be registered. + # This is normal if you are upgrading the database. + # Otherwise, you probably have garbage DMS data. + # These records will be accessible by DB users only. + domains.append( + [ + ("res_model", "=", group["res_model"]), + (True, "=", self.env.user.has_group("base.group_user")), + ] + ) + continue + # Check model access only once per batch + try: + model.check_access(operation) + except AccessError: + continue + domains.append([("res_model", "=", model._name), ("res_id", "=", False)]) + # Check record access in batch too + res_ids = [i for i in group["res_id"] if i] # Hack to remove None res_id + # Apply exists to skip records that do not exist. (e.g. a res.partner + # deleted by database). + model_records = model.browse(res_ids).exists() + related_ok = model_records._filtered_access(operation) + if not related_ok: + continue + domains.append( + [("res_model", "=", model._name), ("res_id", "in", related_ok.ids)] + ) + result = inherited_access_domain + OR(domains) + return result + + @api.model + def _get_access_groups_query(self, operation): + """Return the query to select access groups.""" + operation_check = { + "create": "AND dag.perm_inclusive_create", + "read": "", + "unlink": "AND dag.perm_inclusive_unlink", + "write": "AND dag.perm_inclusive_write", + }[operation] + select = f"""( + SELECT + dir_group_rel.aid + FROM + dms_directory_complete_groups_rel AS dir_group_rel + INNER JOIN dms_access_group AS dag + ON dir_group_rel.gid = dag.id + INNER JOIN dms_access_group_users_rel AS users + ON users.gid = dag.id + WHERE + users.uid = %s {operation_check} + )""" + sql = SQL( + select, + self.env.uid, + ) + return sql + + @api.model + def _get_domain_by_access_groups(self, operation): + """Get domain for records accessible applying DMS access groups.""" + result = [ + ( + f"{self._directory_field}.storage_id_inherit_access_from_parent_record", + "=", + False, + ), + ( + self._directory_field, + "in", + self._get_access_groups_query(operation), + ), + ] + return result + + @api.model + def _get_permission_domain(self, operator, value, operation): + """Abstract logic for searching computed permission fields.""" + _self = self + # HACK ir.rule domain is always computed with sudo, so if this check is + # true, we can assume safely that you're checking permissions + if self.env.su and value == self.env.uid: + _self = self.sudo(False) + value = bool(value) + # Tricky one, to know if you want to search + # positive or negative access + positive = (operator not in NEGATIVE_TERM_OPERATORS) == bool(value) + if _self.env.su: + # You're SUPERUSER_ID + return TRUE_DOMAIN if positive else FALSE_DOMAIN + + result = OR( + [ + _self._get_domain_by_access_groups(operation), + _self._get_domain_by_inheritance(operation), + ] + ) + if not positive: + result.insert(0, "!") + return result + + @api.model + def _search_permission_create(self, operator, value): + return self._get_permission_domain(operator, value, "create") + + @api.model + def _search_permission_read(self, operator, value): + return self._get_permission_domain(operator, value, "read") + + @api.model + def _search_permission_unlink(self, operator, value): + return self._get_permission_domain(operator, value, "unlink") + + @api.model + def _search_permission_write(self, operator, value): + return self._get_permission_domain(operator, value, "write") + + def filtered_domain(self, domain): + """This method is needed to inhibit the behavior when called from the + _check_access() method with sudo() https://github.com/odoo/odoo/blob/fc737a147b9aefbd6ae5d111835ce3f4f7b4240a/odoo/models.py#L4465. + It would cause the error that multiple records are not accessed to be + displayed. + The _filtered_access() method is also overwritten to prevent this sudo() + specific behavior and to be able to access only the appropriate records. + """ + if self.env.su: + return self + return super().filtered_domain(domain) + + def _filtered_access_no_recursion(self, operation: str): + """This method is just the same as _filtered_access + but it can not be called withoud super due to + recursion error. + """ + if self and not self.env.su and (result := self._check_access(operation)): + return self - result[0] + return self + + def _filtered_access(self, operation): + # Only kept to not break inheritance; see next comment + result = super()._filtered_access(operation) + # HACK Always fall back to applying rules by SQL. + # Upstream `_filtered_access()` doesn't use computed fields + # search methods. Thus, it will take the `[('permission_{operation}', + # '=', user.id)]` rule literally. Obviously that will always fail + # because `self[f"permission_{operation}"]` will always be a `bool`, + # while `user.id` will always be an `int`. + result |= self._filtered_access_no_recursion(operation) + return result + + def _check_access_dms_record(self, operation: str) -> tuple | None: + """Specific method "similar" to _check_access() but with a different + behavior: check if you do not really have access to any of the records + in to avoid performing the corresponding create/write/unlink action.""" + if any(self._ids) and not self.env.su: + Rule = self.env["ir.rule"] + domain = Rule._compute_domain(self._name, operation) + items = self.search(domain) + if any(x_id not in items.ids for x_id in self.ids): + raise Rule._make_access_error(operation, (self - items)) + + @api.model_create_multi + def create(self, vals_list): + # Create as sudo to avoid testing creation permissions before DMS security + # groups are attached (otherwise nobody would be able to create) + res = super(DmsSecurityMixin, self.sudo()).create(vals_list) + # Need to flush now, so all groups are stored in DB and the SELECT used + # to check access works + res.flush_recordset() + # Go back to the original sudo state and check we really had creation permission + res = res.sudo(self.env.su) + res._check_access_dms_record("create") + return res + + def write(self, vals): + self._check_access_dms_record("write") + return super().write(vals) + + def unlink(self): + self._check_access_dms_record("unlink") + return super().unlink() diff --git a/dms/models/ir_attachment.py b/dms/models/ir_attachment.py new file mode 100644 index 00000000..52117ef3 --- /dev/null +++ b/dms/models/ir_attachment.py @@ -0,0 +1,108 @@ +# Copyright 2021-2025 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import api, models +from odoo.tools import ormcache + + +class IrAttachment(models.Model): + _inherit = "ir.attachment" + + def _get_dms_directories(self, res_model, res_id): + domain = [ + ("res_model", "=", res_model), + ("res_id", "=", res_id), + ("storage_id.save_type", "=", "attachment"), + ] + if self.env.context.get("attaching_to_record"): + domain += [("storage_id.include_message_attachments", "=", True)] + return self.env["dms.directory"].search(domain) + + def _dms_directories_create(self): + items = self.sudo()._get_dms_directories(self.res_model, False) + for item in items: + model_item = self.env[self.res_model].browse(self.res_id) + ir_model_item = ( + self.env["ir.model"].sudo().search([("model", "=", self.res_model)]) + ) + self.env["dms.directory"].sudo().with_context(check_name=False).create( + { + "name": model_item.display_name, + "model_id": ir_model_item.id, + "res_model": self.res_model, + "res_id": self.res_id, + "parent_id": item.id, + "storage_id": item.storage_id.id, + } + ) + + @ormcache("model") + def _dms_operations_from_model(self, model): + # Apply sudo to prevent ir.rule from being applied. + item = self.env["dms.storage"].sudo().search([("model_ids.model", "=", model)]) + return bool(item) + + def _dms_operations(self): + """Perform the operation only if there is a storage with linked models. + The directory (dms.directory) linked to the record (if it does not exist) + and the file (dms.file) with the linked attachment would be created. + """ + for attachment in self: + if ( + not attachment.res_model + or not attachment.res_id + or ( + attachment.res_model + and not self._dms_operations_from_model(attachment.res_model) + ) + ): + continue + directories = attachment._get_dms_directories( + attachment.res_model, attachment.res_id + ) + if not directories: + attachment._dms_directories_create() + # Get dms_directories again (with items previously created) + directories = attachment._get_dms_directories( + attachment.res_model, attachment.res_id + ) + # Auto-create_files (if not exists) + for directory in directories: + dms_file_model = self.env["dms.file"].sudo() + dms_file = dms_file_model.search( + [ + ("attachment_id", "=", attachment.id), + ("directory_id", "=", directory.id), + ] + ) + if not dms_file: + dms_file_model.create( + { + "name": attachment.name, + "directory_id": directory.id, + "attachment_id": attachment.id, + "res_model": attachment.res_model, + "res_id": attachment.res_id, + } + ) + + @api.model_create_multi + def create(self, vals_list): + records = super().create(vals_list) + if not self.env.context.get("dms_file"): + records._dms_operations() + return records + + def write(self, vals): + res = super().write(vals) + if not self.env.context.get("dms_file") and self.env.context.get( + "attaching_to_record" + ): + self._dms_operations() + return res + + def unlink(self): + if not self.env.context.get("dms_file"): + self.env["dms.file"].search( + [("attachment_id", "in", self.ids)] + ).with_context(dms_file=True).unlink() + return super().unlink() diff --git a/dms/models/ir_binary.py b/dms/models/ir_binary.py new file mode 100644 index 00000000..79ebcb48 --- /dev/null +++ b/dms/models/ir_binary.py @@ -0,0 +1,19 @@ +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from odoo import models + + +class IrBinary(models.AbstractModel): + _inherit = "ir.binary" + + def _find_record_check_access(self, record, access_token, field): + if record._name in ("dms.file", "dms.directory"): + if record.sudo().check_access_token(access_token): + # sudo because the user might not usually have access to the record but + # now the token is valid. + # Used to display the icon in the portal. + return record.sudo() + + return super()._find_record_check_access(record, access_token, field) diff --git a/dms/models/mail_thread.py b/dms/models/mail_thread.py new file mode 100644 index 00000000..4e6514d7 --- /dev/null +++ b/dms/models/mail_thread.py @@ -0,0 +1,15 @@ +# Copyright 2021 Tecnativa - Jairo Llopis +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import models + + +class MailThread(models.AbstractModel): + _inherit = "mail.thread" + + def _process_attachments_for_post(self, attachments, attachment_ids, message_data): + """Indicate to DMS that we're attaching a message to a record.""" + _self = self.with_context(attaching_to_record=True) + return super(MailThread, _self)._process_attachments_for_post( + attachments, attachment_ids, message_data + ) diff --git a/dms/models/mixins_thumbnail.py b/dms/models/mixins_thumbnail.py new file mode 100644 index 00000000..ebaed83d --- /dev/null +++ b/dms/models/mixins_thumbnail.py @@ -0,0 +1,49 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import os + +from odoo import api, fields, models +from odoo.tools.misc import file_path + + +class Thumbnail(models.AbstractModel): + _name = "dms.mixins.thumbnail" + _inherit = "image.mixin" + _description = "DMS thumbnail and icon mixin" + + icon_url = fields.Char(string="Icon URL", compute="_compute_icon_url") + + def _get_icon_disk_path(self): + """Get the local disk path to record icon.""" + name = self._get_icon_placeholder_name() + folders = ["dms", "static", "icons"] + + try: + path = file_path(os.path.join(*folders, name)) + except FileNotFoundError: + return file_path(os.path.join(*folders, "file_unknown.svg")) + + return path or file_path(os.path.join(*folders, "file_unknown.svg")) + + def _get_icon_placeholder_name(self): + return "folder.svg" + + def _get_icon_url(self): + """Obtain URL to record icon.""" + local_path = self._get_icon_disk_path() + icon_name = os.path.basename(local_path) + return f"/dms/static/icons/{icon_name}" + + @api.depends("image_128") + def _compute_icon_url(self): + """Get icon static file URL.""" + for one in self: + # Get URL to thumbnail or to the default icon by file extension + one.icon_url = ( + f"/web/image/{one._name}/{one.id}/image_128/128x128?crop=1" + if one.image_128 + else f"{one._get_icon_url()}?crop=1" + ) diff --git a/dms/models/onboarding_onboarding.py b/dms/models/onboarding_onboarding.py new file mode 100644 index 00000000..803d9e9b --- /dev/null +++ b/dms/models/onboarding_onboarding.py @@ -0,0 +1,16 @@ +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from odoo import api, models + + +class OnboardingOnboarding(models.Model): + _inherit = "onboarding.onboarding" + + # ---------------------------------------------------------- + # Actions + # ---------------------------------------------------------- + @api.model + def action_close_panel_dms_file(self): + self.action_close_panel("dms.onboarding_onboarding_dms_file") diff --git a/dms/models/onboarding_onboarding_step.py b/dms/models/onboarding_onboarding_step.py new file mode 100644 index 00000000..3345bb35 --- /dev/null +++ b/dms/models/onboarding_onboarding_step.py @@ -0,0 +1,50 @@ +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from odoo import api, models + + +class OnboardingOnboardingStep(models.Model): + _inherit = "onboarding.onboarding.step" + + # ---------------------------------------------------------- + # Actions + # ---------------------------------------------------------- + @api.model + def action_open_documents_onboarding_storage(self): + """ + Open the form to create a new storage from the onboarding panel. + """ + return self.env.ref("dms.action_dms_storage_new").read()[0] + + @api.model + def action_open_documents_onboarding_directory(self): + """ + Open the form to create a new directory from the onboarding panel. + """ + storage = self.env["dms.storage"].search([], order="create_date desc", limit=1) + action = self.env.ref("dms.action_dms_directory_new").read()[0] + action["context"] = { + **self.env.context, + **{ + "default_is_root_directory": True, + "default_storage_id": storage and storage.id, + }, + } + return action + + @api.model + def action_open_documents_onboarding_file(self): + """ + Open the form to create a new file from the onboarding panel. + """ + directory = self.env["dms.directory"].search( + [], order="create_date desc", limit=1 + ) + action = self.env.ref("dms.action_dms_file_new").read()[0] + action["context"] = { + **self.env.context, + **{"default_directory_id": directory and directory.id}, + } + return action diff --git a/dms/models/res_company.py b/dms/models/res_company.py new file mode 100644 index 00000000..0262a3bd --- /dev/null +++ b/dms/models/res_company.py @@ -0,0 +1,86 @@ +# Copyright 2020 Creu Blanca +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + + +class ResCompany(models.Model): + _inherit = "res.company" + + documents_onboarding_state = fields.Selection( + selection=[ + ("not_done", "Not done"), + ("just_done", "Just done"), + ("done", "Done"), + ("closed", "Closed"), + ], + default="not_done", + ) + documents_onboarding_storage_state = fields.Selection( + selection=[ + ("not_done", "Not done"), + ("just_done", "Just done"), + ("done", "Done"), + ("closed", "Closed"), + ], + default="not_done", + ) + documents_onboarding_directory_state = fields.Selection( + selection=[ + ("not_done", "Not done"), + ("just_done", "Just done"), + ("done", "Done"), + ("closed", "Closed"), + ], + default="not_done", + ) + documents_onboarding_file_state = fields.Selection( + selection=[ + ("not_done", "Not done"), + ("just_done", "Just done"), + ("done", "Done"), + ("closed", "Closed"), + ], + default="not_done", + ) + + # Functions + def get_and_update_documents_onboarding_state(self): + step_states = [ + "documents_onboarding_storage_state", + "documents_onboarding_directory_state", + "documents_onboarding_file_state", + ] + onboarding_state = "documents_onboarding_state" + old_values = {} + all_done = True + + for step_state in step_states: + old_values[step_state] = self[step_state] + if self[step_state] == "just_done": + self[step_state] = "done" + all_done = all_done and self[step_state] == "done" + + if all_done: + old_values[onboarding_state] = ( + "just_done" if self[onboarding_state] == "not_done" else "done" + ) + self[onboarding_state] = "done" + + return old_values + + # Actions + @api.model + def action_close_documents_onboarding(self): + self.env.user.company_id.documents_onboarding_state = "closed" + + def set_onboarding_step_done(self, step): + self.ensure_one() + if self[step] == "not_done": + self[step] = "just_done" diff --git a/dms/models/res_config_settings.py b/dms/models/res_config_settings.py new file mode 100644 index 00000000..e1e00fc9 --- /dev/null +++ b/dms/models/res_config_settings.py @@ -0,0 +1,21 @@ +# Copyright 2020 Creu Blanca +# Copyright 2017-2019 MuK IT GmbH +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + documents_binary_max_size = fields.Integer( + string="Size", + help="Defines the maximum upload size in MB. Default (25MB)", + config_parameter="dms.binary_max_size", + ) + + documents_forbidden_extensions = fields.Char( + string="Extensions", + help="Defines a list of forbidden file extensions. (Example: 'exe,msi')", + config_parameter="dms.forbidden_extensions", + ) diff --git a/dms/models/storage.py b/dms/models/storage.py new file mode 100644 index 00000000..cbc74cf0 --- /dev/null +++ b/dms/models/storage.py @@ -0,0 +1,133 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import _, api, fields, models +from odoo.exceptions import AccessError + +_logger = logging.getLogger(__name__) + + +class Storage(models.Model): + _name = "dms.storage" + _description = "Storage" + + name = fields.Char(required=True) + save_type = fields.Selection( + selection=[ + ("database", "Database"), + ("file", "Filestore"), + ("attachment", "Attachment"), + ], + default="database", + required=True, + help="The save type is used to determine how a file is saved by the system. " + "If you change this setting, you can migrate existing files manually by " + "triggering the action.", + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + default=lambda self: self.env.company, + help="If set, directories and files will only be available for " + "the selected company.", + ) + is_hidden = fields.Boolean( + string="Storage is Hidden", + default=False, + help="Indicates if directories and files are hidden by default.", + ) + root_directory_ids = fields.One2many( + comodel_name="dms.directory", + inverse_name="storage_id", + string="Root Directories", + auto_join=False, + readonly=False, + copy=False, + ) + storage_directory_ids = fields.One2many( + comodel_name="dms.directory", + inverse_name="storage_id", + string="Directories", + auto_join=False, + readonly=True, + copy=False, + ) + storage_file_ids = fields.One2many( + comodel_name="dms.file", + inverse_name="storage_id", + string="Files", + auto_join=False, + readonly=True, + copy=False, + ) + count_storage_directories = fields.Integer( + compute="_compute_count_storage_directories", string="Count Directories" + ) + count_storage_files = fields.Integer( + compute="_compute_count_storage_files", string="Count Files" + ) + model_ids = fields.Many2many("ir.model", string="Linked Models") + inherit_access_from_parent_record = fields.Boolean( + string="Inherit permissions from related record", + default=False, + help="Indicate if directories and files access work only with " + "related model access (for example, if some directories are related " + "with any sale, only users with read access to these sale can access)", + ) + include_message_attachments = fields.Boolean( + string="Create files from message attachments", + default=False, + help="Indicate if directories and files auto-create in mail " + "composition process too", + ) + model = fields.Char(search="_search_model", store=False) + + def _search_model(self, operator, value): + allowed_items = self.env["ir.model"].sudo().search([("model", operator, value)]) + return [("model_ids", "in", allowed_items.ids)] + + @api.onchange("save_type") + def _onchange_save_type(self): + for record in self: + if record.save_type == "attachment": + record.inherit_access_from_parent_record = True + + # Actions + def action_storage_migrate(self): + if self.save_type != "attachment": + if not self.env.user.has_group("dms.group_dms_manager"): + raise AccessError(_("Only managers can execute this action.")) + files = self.env["dms.file"].with_context(active_test=False).sudo() + + for record in self: + domain = [ + ("require_migration", "=", True), + ("storage_id", "=", record.id), + ] + files.search(domain).action_migrate() + + def action_save_onboarding_storage_step(self): + self.env.user.company_id.set_onboarding_step_done( + "documents_onboarding_storage_state" + ) + + # Read, View + @api.depends("storage_directory_ids") + def _compute_count_storage_directories(self): + for record in self: + record.count_storage_directories = len(record.storage_directory_ids) + + @api.depends("storage_file_ids") + def _compute_count_storage_files(self): + for record in self: + record.count_storage_files = len(record.storage_file_ids) + + def write(self, values): + res = super().write(values) + if "model_ids" in values: + self.env.registry.clear_cache() + return res diff --git a/dms/models/tag.py b/dms/models/tag.py new file mode 100644 index 00000000..25dfb9a5 --- /dev/null +++ b/dms/models/tag.py @@ -0,0 +1,59 @@ +# Copyright 2020 RGB Consulting +# Copyright 2017-2019 MuK IT GmbH +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + + +class Tag(models.Model): + _name = "dms.tag" + _description = "Document Tag" + + name = fields.Char(required=True, translate=True) + active = fields.Boolean( + default=True, + help="The active field allows you " "to hide the tag without removing it.", + ) + category_id = fields.Many2one( + comodel_name="dms.category", + context={"dms_category_show_path": True}, + string="Category", + ondelete="set null", + ) + color = fields.Integer(string="Color Index", default=10) + directory_ids = fields.Many2many( + comodel_name="dms.directory", + relation="dms_directory_tag_rel", + column1="tid", + column2="did", + string="Directories", + readonly=True, + ) + file_ids = fields.Many2many( + comodel_name="dms.file", + relation="dms_file_tag_rel", + column1="tid", + column2="fid", + string="Files", + readonly=True, + ) + count_directories = fields.Integer(compute="_compute_count_directories") + count_files = fields.Integer(compute="_compute_count_files") + + _sql_constraints = [ + ("name_uniq", "unique (name, category_id)", "Tag name already exists!"), + ] + + @api.depends("directory_ids") + def _compute_count_directories(self): + for rec in self: + rec.count_directories = len(rec.directory_ids) + + @api.depends("file_ids") + def _compute_count_files(self): + for rec in self: + rec.count_files = len(rec.file_ids) diff --git a/dms/pyproject.toml b/dms/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/dms/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/dms/readme/CONFIGURE.md b/dms/readme/CONFIGURE.md new file mode 100644 index 00000000..7443be66 --- /dev/null +++ b/dms/readme/CONFIGURE.md @@ -0,0 +1,59 @@ +# Configuration + +To configure this module, you need to: + +## 1. Create a storage +1. Go to *Documents -\> Configuration -\> Storages*. + +2. Create a new document storage. You can choose between three options on `Save Type`: + - `Database`: Store the files on the database as a field + - `Attachment`: Store the files as attachments + - `File`: Store the files on the file system + +## 2. Create an access group +1. Next, create an administrative access group. Go to *Configuration -\> Access Groups*. + - Create a new group, name it appropriately, and turn on all three + permissions (Create, Write and Unlink. Read is implied and always + enabled). + - Add any other top-level administrative users to the group if + needed (your user should already be there). + - You can create other groups in here later for fine-grained access + control. + +## 3. Create a directory +1. Afterward, go to *Documents -\> Directories*. + +2. Create a new directory, mark it as root and select the previously created setting. + - Select the *Groups* tab and add your administrative group created + above. + If your directory was already created before the group, you can also add it in the + access groups (*Configuration -\> Access Groups*). + +3. In the directory settings, you can also add other access groups (created above) that will be able to: + - read + - create + - write + - delete + +# Migration + +If you need to modify the storage `Save Type` you might want to migrate +the file data. To achieve it, you need to: + +1. Go to *Documents -\> Configuration -\> Storage* and select the + storage you want to modify +2. Modify the save type +3. Press the button Migrate files if you want to migrate all the files + at once +4. Press the button Manual File Migration to specify files one by one + +You can check all the files that still need to be migrated from all +storages and migrate them manually on *Documents -\> Configuration -\> +Migration* + +# File Wizard Selection + +There is an action called `action_dms_file_wizard_selector` to open a +wizard to list files in kanban view. This can be used (example +dms_attachment_link module) to add a button in kanban view with the +action we need. diff --git a/dms/readme/CONTRIBUTORS.md b/dms/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..a319c249 --- /dev/null +++ b/dms/readme/CONTRIBUTORS.md @@ -0,0 +1,16 @@ +- Mathias Markl \<\> +- Enric Tobella \<\> +- Antoni Romera +- Gelu Boros \<\> +- [Tecnativa](https://www.tecnativa.com): + - Víctor Martínez + - Pedro M. Baeza + - Jairo Llopis +- [Elego](https://www.elegosoft.com): + - Yu Weng \<\> + - Philip Witte \<\> + - Khanh Bui \<\> +- [Subteno](https://www.subteno.com): + - Timothée Vannier <> +- [Kencove](https://www.kencove.com): + - Mohamed Alkobrosli <> diff --git a/dms/readme/CREDITS.md b/dms/readme/CREDITS.md new file mode 100644 index 00000000..a1fe32cc --- /dev/null +++ b/dms/readme/CREDITS.md @@ -0,0 +1,6 @@ +Some pictures are based on or inspired by: + +- [Roundicons](https://www.flaticon.com/authors/roundicons) +- [Smashicons](https://www.flaticon.com/authors/smashicons) +- [EmojiOne](https://github.com/EmojiTwo/emojitwo) : Portal DMS icon +- [GitHub Octicons](https://github.com/primer/octicons/) : The main DMS icon diff --git a/dms/readme/DESCRIPTION.md b/dms/readme/DESCRIPTION.md new file mode 100644 index 00000000..30699df5 --- /dev/null +++ b/dms/readme/DESCRIPTION.md @@ -0,0 +1,9 @@ +DMS is a module for creating, managing and viewing document files +directly within Odoo. This module is only the basis for an entire +ecosystem of apps that extend and seamlessly integrate with the document +management system. + +This module adds portal functionality for directories and files for +allowed users, both portal or internal users. You can get as well a +tokenized link from a directory or a file for sharing it with any +anonymous user. diff --git a/dms/readme/INSTALL.md b/dms/readme/INSTALL.md new file mode 100644 index 00000000..c8eb8aba --- /dev/null +++ b/dms/readme/INSTALL.md @@ -0,0 +1,4 @@ +## Preview + +`python-magic` library is recommended to be installed for having whole +support to get proper file types and file preview. diff --git a/dms/readme/ROADMAP.md b/dms/readme/ROADMAP.md new file mode 100644 index 00000000..27f7de77 --- /dev/null +++ b/dms/readme/ROADMAP.md @@ -0,0 +1,21 @@ +- Files preview in portal +- Allow to download folder in portal and create zip file with all + content +- Save in cache own_root directories and update in every + create/write/unlink function +- Add a migration procedure for converting an storage to attachment one + for populating existing records with attachments as folders +- Add a link from attachment view in chatter to linked documents +- If Inherit permissions from related record (the + inherit_access_from_parent_record field from storage) is changed when + directories already exist, inconsistencies may occur because groups + defined in the directories and subdirectories will still exist, all + groups in these directories should be removed before changing. +- Since portal users can read `dms.storage` records, if your module + extends this model to another storage backend that needs using + secrets, remember to forbid access to the secrets fields by other + means. It would be nice to be able to remove that rule at some point. +- Searchpanel in files: Highlight items (shading) without records when + filtering something (by name for example). +- Accessing the clipboard (for example copy share link of file/directory) + is limited to secure connections. It also happens in any part of Odoo. diff --git a/dms/readme/USAGE.md b/dms/readme/USAGE.md new file mode 100644 index 00000000..115fee86 --- /dev/null +++ b/dms/readme/USAGE.md @@ -0,0 +1,11 @@ +The best way to manage the documents is to switch to the Documents view. +Existing documents can be managed there and new documents can be +created. + +## Portal functionality + +You can add any portal user to DMS access groups, and then allow that +group in directories, so they will see in the portal such directories +and their files. Another possibility is to click on "Share" button +inside a directory or a file for obtaining a tokenized link for single +access to that resource, no matter if logged or not. diff --git a/dms/security/ir.model.access.csv b/dms/security/ir.model.access.csv new file mode 100644 index 00000000..f192f980 --- /dev/null +++ b/dms/security/ir.model.access.csv @@ -0,0 +1,27 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink + +access_dms_tag_user,dms_tag_user,model_dms_tag,group_dms_user,1,1,1,1 +access_dms_category_user,dms_category_user,model_dms_category,group_dms_user,1,1,1,1 + +access_dms_storage_base_user,dms_storage_base_user,model_dms_storage,base.group_user,1,0,0,0 +access_dms_storage_portal,dms_storage_portal,model_dms_storage,base.group_portal,1,0,0,0 +access_dms_storage_user,dms_storage_user,model_dms_storage,group_dms_user,1,0,0,0 +access_dms_storage_manager,dms_storage_manager,model_dms_storage,group_dms_manager,1,1,1,1 + +access_dms_directory_public,dms_directory_public,model_dms_directory,base.group_public,1,0,0,0 +access_dms_directory_portal,dms_directory_portal,model_dms_directory,base.group_portal,1,0,0,0 +access_dms_directory_base_user,dms_directory_base_user,model_dms_directory,base.group_user,1,0,0,0 +access_dms_directory_user,dms_directory_user,model_dms_directory,group_dms_user,1,1,1,1 + +access_dms_file_public,dms_file_public,model_dms_file,base.group_public,1,0,0,0 +access_dms_file_portal,dms_file_portal,model_dms_file,base.group_portal,1,0,0,0 +access_dms_file_base_user,dms_file_base_user,model_dms_file,base.group_user,1,0,0,0 +access_dms_file_user,dms_file_user,model_dms_file,group_dms_user,1,1,1,1 + +access_dms_access_group_public,access_dms_access_group_public,model_dms_access_group,base.group_public,1,0,0,0 +access_dms_access_group_portal,access_dms_access_group_portal,model_dms_access_group,base.group_portal,1,0,0,0 +access_security_access_groups_user,access_security_access_groups_user,model_dms_access_group,base.group_user,1,0,0,0 +access_security_access_groups_dms_user,access_security_access_groups_dms_user,model_dms_access_group,group_dms_user,1,1,1,1 + +access_wizard_dms_file_move,access_wizard_dms_file_move,model_wizard_dms_file_move,group_dms_user,1,1,1,1 +access_wizard_dms_share,access_wizard_dms_share,model_wizard_dms_share,group_dms_manager,1,1,1,0 diff --git a/dms/security/security.xml b/dms/security/security.xml new file mode 100644 index 00000000..cac576fe --- /dev/null +++ b/dms/security/security.xml @@ -0,0 +1,109 @@ + + + + + Documents + + + User + + + + Manager + + + + + DMS Storage multi-company + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + DMS Directory multi-company + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + File multi-company + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + Locked files are only modified by locker user. + + + + + + + + ['|', ('locked_by', '=', False), ('locked_by', '=', user.id)] + + + DMS users can only edit and delete their own groups. + + + + + + + [('create_uid','=',user.id)] + + + DMS Managers can edit and delete all groups. + + + + + + + [(1 ,'=', 1)] + + + + Basic users cannot access hidden storage + + + + + + + [('is_hidden', '=', False)] + + + Managers can access hidden storage + + + + + + + [('is_hidden', '=', True)] + + + diff --git a/dms/static/description/icon.png b/dms/static/description/icon.png new file mode 100644 index 00000000..26d62db6 Binary files /dev/null and b/dms/static/description/icon.png differ diff --git a/dms/static/description/icon.svg b/dms/static/description/icon.svg new file mode 100644 index 00000000..663c409d --- /dev/null +++ b/dms/static/description/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/dms/static/description/index.html b/dms/static/description/index.html new file mode 100644 index 00000000..854441b4 --- /dev/null +++ b/dms/static/description/index.html @@ -0,0 +1,620 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Document Management System

+ +

Beta License: LGPL-3 OCA/dms Translate me on Weblate Try me on Runboat

+

DMS is a module for creating, managing and viewing document files +directly within Odoo. This module is only the basis for an entire +ecosystem of apps that extend and seamlessly integrate with the document +management system.

+

This module adds portal functionality for directories and files for +allowed users, both portal or internal users. You can get as well a +tokenized link from a directory or a file for sharing it with any +anonymous user.

+

Table of contents

+ +
+

Installation

+
+

Preview

+

python-magic library is recommended to be installed for having whole +support to get proper file types and file preview.

+
+
+ +
+

Configuration

+

To configure this module, you need to:

+
+

1. Create a storage

+
    +
  1. Go to Documents -> Configuration -> Storages.
  2. +
  3. Create a new document storage. You can choose between three options +on Save Type:
      +
    • Database: Store the files on the database as a field
    • +
    • Attachment: Store the files as attachments
    • +
    • File: Store the files on the file system
    • +
    +
  4. +
+
+
+

2. Create an access group

+
    +
  1. Next, create an administrative access group. Go to Configuration -> +Access Groups.
      +
    • Create a new group, name it appropriately, and turn on all three +permissions (Create, Write and Unlink. Read is implied and always +enabled).
    • +
    • Add any other top-level administrative users to the group if needed +(your user should already be there).
    • +
    • You can create other groups in here later for fine-grained access +control.
    • +
    +
  2. +
+
+
+

3. Create a directory

+
    +
  1. Afterward, go to Documents -> Directories.
  2. +
  3. Create a new directory, mark it as root and select the previously +created setting.
      +
    • Select the Groups tab and add your administrative group created +above. If your directory was already created before the group, you +can also add it in the access groups (Configuration -> Access +Groups).
    • +
    +
  4. +
  5. In the directory settings, you can also add other access groups +(created above) that will be able to:
      +
    • read
    • +
    • create
    • +
    • write
    • +
    • delete
    • +
    +
  6. +
+
+
+
+

Migration

+

If you need to modify the storage Save Type you might want to +migrate the file data. To achieve it, you need to:

+
    +
  1. Go to Documents -> Configuration -> Storage and select the storage +you want to modify
  2. +
  3. Modify the save type
  4. +
  5. Press the button Migrate files if you want to migrate all the files +at once
  6. +
  7. Press the button Manual File Migration to specify files one by one
  8. +
+

You can check all the files that still need to be migrated from all +storages and migrate them manually on Documents -> Configuration -> +Migration

+
+
+

File Wizard Selection

+

There is an action called action_dms_file_wizard_selector to open a +wizard to list files in kanban view. This can be used (example +dms_attachment_link module) to add a button in kanban view with the +action we need.

+
+
+

Usage

+

The best way to manage the documents is to switch to the Documents view. +Existing documents can be managed there and new documents can be +created.

+
+

Portal functionality

+

You can add any portal user to DMS access groups, and then allow that +group in directories, so they will see in the portal such directories +and their files. Another possibility is to click on “Share” button +inside a directory or a file for obtaining a tokenized link for single +access to that resource, no matter if logged or not.

+
+
+
+

Known issues / Roadmap

+
    +
  • Files preview in portal
  • +
  • Allow to download folder in portal and create zip file with all +content
  • +
  • Save in cache own_root directories and update in every +create/write/unlink function
  • +
  • Add a migration procedure for converting an storage to attachment one +for populating existing records with attachments as folders
  • +
  • Add a link from attachment view in chatter to linked documents
  • +
  • If Inherit permissions from related record (the +inherit_access_from_parent_record field from storage) is changed when +directories already exist, inconsistencies may occur because groups +defined in the directories and subdirectories will still exist, all +groups in these directories should be removed before changing.
  • +
  • Since portal users can read dms.storage records, if your module +extends this model to another storage backend that needs using +secrets, remember to forbid access to the secrets fields by other +means. It would be nice to be able to remove that rule at some point.
  • +
  • Searchpanel in files: Highlight items (shading) without records when +filtering something (by name for example).
  • +
  • Accessing the clipboard (for example copy share link of +file/directory) is limited to secure connections. It also happens in +any part of Odoo.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • MuK IT
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

Some pictures are based on or inspired by:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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/dms project on GitHub.

+

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

+
+
+
+
+ + diff --git a/dms/static/description/portal_icon.svg b/dms/static/description/portal_icon.svg new file mode 100644 index 00000000..6808515b --- /dev/null +++ b/dms/static/description/portal_icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/dms/static/icons/file_ai.svg b/dms/static/icons/file_ai.svg new file mode 100644 index 00000000..6001633d --- /dev/null +++ b/dms/static/icons/file_ai.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_aj.svg b/dms/static/icons/file_aj.svg new file mode 100644 index 00000000..15960f59 --- /dev/null +++ b/dms/static/icons/file_aj.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_avi.svg b/dms/static/icons/file_avi.svg new file mode 100644 index 00000000..117a2e45 --- /dev/null +++ b/dms/static/icons/file_avi.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_c.svg b/dms/static/icons/file_c.svg new file mode 100644 index 00000000..9ace81b5 --- /dev/null +++ b/dms/static/icons/file_c.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_cbl.svg b/dms/static/icons/file_cbl.svg new file mode 100644 index 00000000..f6344b98 --- /dev/null +++ b/dms/static/icons/file_cbl.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_cc.svg b/dms/static/icons/file_cc.svg new file mode 100644 index 00000000..8e5f1d8c --- /dev/null +++ b/dms/static/icons/file_cc.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_coffee.svg b/dms/static/icons/file_coffee.svg new file mode 100644 index 00000000..ea45eb8b --- /dev/null +++ b/dms/static/icons/file_coffee.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_cs.svg b/dms/static/icons/file_cs.svg new file mode 100644 index 00000000..2faa6541 --- /dev/null +++ b/dms/static/icons/file_cs.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_css.svg b/dms/static/icons/file_css.svg new file mode 100644 index 00000000..5ebb3825 --- /dev/null +++ b/dms/static/icons/file_css.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_csv.svg b/dms/static/icons/file_csv.svg new file mode 100644 index 00000000..bb37b9b1 --- /dev/null +++ b/dms/static/icons/file_csv.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_dbf.svg b/dms/static/icons/file_dbf.svg new file mode 100644 index 00000000..9553c913 --- /dev/null +++ b/dms/static/icons/file_dbf.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_dll.svg b/dms/static/icons/file_dll.svg new file mode 100644 index 00000000..e0c99af0 --- /dev/null +++ b/dms/static/icons/file_dll.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_doc.svg b/dms/static/icons/file_doc.svg new file mode 100644 index 00000000..833d1c72 --- /dev/null +++ b/dms/static/icons/file_doc.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_docx.svg b/dms/static/icons/file_docx.svg new file mode 100644 index 00000000..b1160efc --- /dev/null +++ b/dms/static/icons/file_docx.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_dwg.svg b/dms/static/icons/file_dwg.svg new file mode 100644 index 00000000..f3008372 --- /dev/null +++ b/dms/static/icons/file_dwg.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_eml.svg b/dms/static/icons/file_eml.svg new file mode 100644 index 00000000..065ff7e1 --- /dev/null +++ b/dms/static/icons/file_eml.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_eps.svg b/dms/static/icons/file_eps.svg new file mode 100644 index 00000000..b767a36d --- /dev/null +++ b/dms/static/icons/file_eps.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_exe.svg b/dms/static/icons/file_exe.svg new file mode 100644 index 00000000..e79009c3 --- /dev/null +++ b/dms/static/icons/file_exe.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_f.svg b/dms/static/icons/file_f.svg new file mode 100644 index 00000000..e742e363 --- /dev/null +++ b/dms/static/icons/file_f.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_fla.svg b/dms/static/icons/file_fla.svg new file mode 100644 index 00000000..02bb98fb --- /dev/null +++ b/dms/static/icons/file_fla.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_gif.svg b/dms/static/icons/file_gif.svg new file mode 100644 index 00000000..71c64f5c --- /dev/null +++ b/dms/static/icons/file_gif.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_go.svg b/dms/static/icons/file_go.svg new file mode 100644 index 00000000..efa4ad89 --- /dev/null +++ b/dms/static/icons/file_go.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_groovy.svg b/dms/static/icons/file_groovy.svg new file mode 100644 index 00000000..10ee7c13 --- /dev/null +++ b/dms/static/icons/file_groovy.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_html.svg b/dms/static/icons/file_html.svg new file mode 100644 index 00000000..7b57d532 --- /dev/null +++ b/dms/static/icons/file_html.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_iso.svg b/dms/static/icons/file_iso.svg new file mode 100644 index 00000000..9a3abba4 --- /dev/null +++ b/dms/static/icons/file_iso.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_java.svg b/dms/static/icons/file_java.svg new file mode 100644 index 00000000..ce4d9d64 --- /dev/null +++ b/dms/static/icons/file_java.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_jpg.svg b/dms/static/icons/file_jpg.svg new file mode 100644 index 00000000..96732375 --- /dev/null +++ b/dms/static/icons/file_jpg.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_js.svg b/dms/static/icons/file_js.svg new file mode 100644 index 00000000..c510c185 --- /dev/null +++ b/dms/static/icons/file_js.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_json.svg b/dms/static/icons/file_json.svg new file mode 100644 index 00000000..7e97918f --- /dev/null +++ b/dms/static/icons/file_json.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_less.svg b/dms/static/icons/file_less.svg new file mode 100644 index 00000000..1f44ccc5 --- /dev/null +++ b/dms/static/icons/file_less.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_md.svg b/dms/static/icons/file_md.svg new file mode 100644 index 00000000..145c81bb --- /dev/null +++ b/dms/static/icons/file_md.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_mov.svg b/dms/static/icons/file_mov.svg new file mode 100644 index 00000000..3cc57817 --- /dev/null +++ b/dms/static/icons/file_mov.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_mp3.svg b/dms/static/icons/file_mp3.svg new file mode 100644 index 00000000..a28f5e57 --- /dev/null +++ b/dms/static/icons/file_mp3.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_mp4.svg b/dms/static/icons/file_mp4.svg new file mode 100644 index 00000000..67f6fab6 --- /dev/null +++ b/dms/static/icons/file_mp4.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_odp.svg b/dms/static/icons/file_odp.svg new file mode 100644 index 00000000..0238d643 --- /dev/null +++ b/dms/static/icons/file_odp.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_ods.svg b/dms/static/icons/file_ods.svg new file mode 100644 index 00000000..ac3c19c7 --- /dev/null +++ b/dms/static/icons/file_ods.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_odt.svg b/dms/static/icons/file_odt.svg new file mode 100644 index 00000000..0340ca2f --- /dev/null +++ b/dms/static/icons/file_odt.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_pdf.svg b/dms/static/icons/file_pdf.svg new file mode 100644 index 00000000..f4063eb2 --- /dev/null +++ b/dms/static/icons/file_pdf.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_php.svg b/dms/static/icons/file_php.svg new file mode 100644 index 00000000..0402747b --- /dev/null +++ b/dms/static/icons/file_php.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_ppt.svg b/dms/static/icons/file_ppt.svg new file mode 100644 index 00000000..b3a1ea7c --- /dev/null +++ b/dms/static/icons/file_ppt.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_pptx.svg b/dms/static/icons/file_pptx.svg new file mode 100644 index 00000000..0d5c5b85 --- /dev/null +++ b/dms/static/icons/file_pptx.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_psd.svg b/dms/static/icons/file_psd.svg new file mode 100644 index 00000000..818ef7ec --- /dev/null +++ b/dms/static/icons/file_psd.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_py.svg b/dms/static/icons/file_py.svg new file mode 100644 index 00000000..068dcbca --- /dev/null +++ b/dms/static/icons/file_py.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_rar.svg b/dms/static/icons/file_rar.svg new file mode 100644 index 00000000..7cd14c57 --- /dev/null +++ b/dms/static/icons/file_rar.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_raw.svg b/dms/static/icons/file_raw.svg new file mode 100644 index 00000000..20347f4b --- /dev/null +++ b/dms/static/icons/file_raw.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_rtf.svg b/dms/static/icons/file_rtf.svg new file mode 100644 index 00000000..a7de37b2 --- /dev/null +++ b/dms/static/icons/file_rtf.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_sass.svg b/dms/static/icons/file_sass.svg new file mode 100644 index 00000000..d8442467 --- /dev/null +++ b/dms/static/icons/file_sass.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_sc.svg b/dms/static/icons/file_sc.svg new file mode 100644 index 00000000..c067be48 --- /dev/null +++ b/dms/static/icons/file_sc.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_sh.svg b/dms/static/icons/file_sh.svg new file mode 100644 index 00000000..e0c4f3e2 --- /dev/null +++ b/dms/static/icons/file_sh.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_svg.svg b/dms/static/icons/file_svg.svg new file mode 100644 index 00000000..dfad09a0 --- /dev/null +++ b/dms/static/icons/file_svg.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_tar.svg b/dms/static/icons/file_tar.svg new file mode 100644 index 00000000..5bbacc09 --- /dev/null +++ b/dms/static/icons/file_tar.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_ttf.svg b/dms/static/icons/file_ttf.svg new file mode 100644 index 00000000..06809a5c --- /dev/null +++ b/dms/static/icons/file_ttf.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_txt.svg b/dms/static/icons/file_txt.svg new file mode 100644 index 00000000..a4160ec9 --- /dev/null +++ b/dms/static/icons/file_txt.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_unknown.svg b/dms/static/icons/file_unknown.svg new file mode 100644 index 00000000..a48144a6 --- /dev/null +++ b/dms/static/icons/file_unknown.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_wav.svg b/dms/static/icons/file_wav.svg new file mode 100644 index 00000000..e36f05b6 --- /dev/null +++ b/dms/static/icons/file_wav.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_xls.svg b/dms/static/icons/file_xls.svg new file mode 100644 index 00000000..ad9f2dd0 --- /dev/null +++ b/dms/static/icons/file_xls.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_xlsx.svg b/dms/static/icons/file_xlsx.svg new file mode 100644 index 00000000..abfb50bf --- /dev/null +++ b/dms/static/icons/file_xlsx.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_xml.svg b/dms/static/icons/file_xml.svg new file mode 100644 index 00000000..19e77d2f --- /dev/null +++ b/dms/static/icons/file_xml.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/file_zip.svg b/dms/static/icons/file_zip.svg new file mode 100644 index 00000000..73ed3273 --- /dev/null +++ b/dms/static/icons/file_zip.svg @@ -0,0 +1 @@ + diff --git a/dms/static/icons/folder.svg b/dms/static/icons/folder.svg new file mode 100644 index 00000000..90547b0a --- /dev/null +++ b/dms/static/icons/folder.svg @@ -0,0 +1 @@ + diff --git a/dms/static/lib/img/banner/documents_onboarding_directory.png b/dms/static/lib/img/banner/documents_onboarding_directory.png new file mode 100644 index 00000000..d7938770 Binary files /dev/null and b/dms/static/lib/img/banner/documents_onboarding_directory.png differ diff --git a/dms/static/lib/img/banner/documents_onboarding_file.png b/dms/static/lib/img/banner/documents_onboarding_file.png new file mode 100644 index 00000000..ac830fa6 Binary files /dev/null and b/dms/static/lib/img/banner/documents_onboarding_file.png differ diff --git a/dms/static/src/js/fields/path_json/path_owl.esm.js b/dms/static/src/js/fields/path_json/path_owl.esm.js new file mode 100644 index 00000000..05c2d48b --- /dev/null +++ b/dms/static/src/js/fields/path_json/path_owl.esm.js @@ -0,0 +1,52 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {Component, onWillUpdateProps} from "@odoo/owl"; +import {_t} from "@web/core/l10n/translation"; +import {registry} from "@web/core/registry"; +import {standardFieldProps} from "@web/views/fields/standard_field_props"; +import {useService} from "@web/core/utils/hooks"; + +class DmsPathField extends Component { + setup() { + super.setup(); + this.action = useService("action"); + this.formatData(this.props); + onWillUpdateProps((nextProps) => this.formatData(nextProps)); + } + + formatData(props) { + const path_json = props.record.data && props.record.data.path_json; + this.data = JSON.parse(path_json || "[]"); + } + + _onNodeClicked(event) { + event.preventDefault(); + const target = event.currentTarget; + this.action.doAction({ + type: "ir.actions.act_window", + res_model: target.getAttribute("data-model"), + res_id: Number(target.getAttribute("data-id")), + views: [[false, "form"]], + target: "current", + context: {}, + }); + } +} + +DmsPathField.template = "dms.DmsPathField"; +DmsPathField.props = { + ...standardFieldProps, +}; + +const dmsPathField = { + component: DmsPathField, + displayName: _t("Dms Path Field"), + supportedTypes: ["text"], + extractProps: () => { + return {}; + }, +}; + +registry.category("fields").add("path_json", dmsPathField); diff --git a/dms/static/src/js/fields/path_json/path_owl.xml b/dms/static/src/js/fields/path_json/path_owl.xml new file mode 100644 index 00000000..b2a8e7c7 --- /dev/null +++ b/dms/static/src/js/fields/path_json/path_owl.xml @@ -0,0 +1,30 @@ + + + + + + + + / + + + + + + / + + + + + + + diff --git a/dms/static/src/js/fields/preview_binary/preview_record.esm.js b/dms/static/src/js/fields/preview_binary/preview_record.esm.js new file mode 100644 index 00000000..ca55cdd5 --- /dev/null +++ b/dms/static/src/js/fields/preview_binary/preview_record.esm.js @@ -0,0 +1,45 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {BinaryField} from "@web/views/fields/binary/binary_field"; +import {_t} from "@web/core/l10n/translation"; +import {registry} from "@web/core/registry"; +import {standardFieldProps} from "@web/views/fields/standard_field_props"; +import {useFileViewer} from "@web/core/file_viewer/file_viewer_hook"; +import {useService} from "@web/core/utils/hooks"; + +export class PreviewRecordField extends BinaryField { + setup() { + super.setup(); + this.store = useService("mail.store"); + this.fileViewer = useFileViewer(); + } + + onFilePreview() { + const self = this; + const attachment = this.store.Attachment.insert({ + id: self.props.record.resId, + filename: self.props.record.data.display_name || "", + name: self.props.record.data.display_name || "", + mimetype: self.props.record.data.mimetype, + model_name: self.props.record.resModel, + }); + this.fileViewer.open(attachment); + } +} + +PreviewRecordField.template = "dms.FilePreviewField"; +PreviewRecordField.props = { + ...standardFieldProps, +}; + +const previewRecordField = { + component: PreviewRecordField, + displayName: _t("Preview Record"), + supportedTypes: ["binary"], + extractProps: () => { + return {}; + }, +}; +registry.category("fields").add("preview_binary", previewRecordField); diff --git a/dms/static/src/js/fields/preview_binary/preview_record.xml b/dms/static/src/js/fields/preview_binary/preview_record.xml new file mode 100644 index 00000000..796e7470 --- /dev/null +++ b/dms/static/src/js/fields/preview_binary/preview_record.xml @@ -0,0 +1,40 @@ + + + + + + + + +
+
+
diff --git a/dms/static/src/js/views/file_kanban_record.esm.js b/dms/static/src/js/views/file_kanban_record.esm.js new file mode 100644 index 00000000..335fb08d --- /dev/null +++ b/dms/static/src/js/views/file_kanban_record.esm.js @@ -0,0 +1,59 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {KanbanRecord} from "@web/views/kanban/kanban_record"; +import {useFileViewer} from "@web/core/file_viewer/file_viewer_hook"; +import {useService} from "@web/core/utils/hooks"; + +const videoReadableTypes = ["x-matroska", "mp4", "webm"]; +const audioReadableTypes = ["mp3", "ogg", "wav", "aac", "mpa", "flac", "m4a"]; + +export class FileKanbanRecord extends KanbanRecord { + setup() { + super.setup(); + this.store = useService("mail.store"); + this.fileViewer = useFileViewer(); + } + + isVideo(mimetype) { + return videoReadableTypes.includes(mimetype); + } + + isAudio(mimetype) { + return audioReadableTypes.includes(mimetype); + } + + /** + * @override + * + * Override to open the preview upon clicking the image, if compatible. + */ + onGlobalClick(ev) { + const self = this; + + if (ev.target.closest(".o_kanban_dms_file_preview")) { + const file_type = self.props.record.data.name.split(".")[1]; + let mimetype = ""; + + if (self.isVideo(file_type)) { + mimetype = `video/${file_type}`; + } else if (self.isAudio(file_type)) { + mimetype = "audio/mpeg"; + } else { + mimetype = self.props.record.data.mimetype; + } + + const attachment = this.store.Attachment.insert({ + id: self.props.record.data.id, + filename: self.props.record.data.name, + name: self.props.record.data.name, + mimetype: mimetype, + model_name: self.props.record.resModel, + }); + this.fileViewer.open(attachment); + return; + } + return super.onGlobalClick(ev); + } +} diff --git a/dms/static/src/js/views/file_kanban_renderer.esm.js b/dms/static/src/js/views/file_kanban_renderer.esm.js new file mode 100644 index 00000000..157f74fe --- /dev/null +++ b/dms/static/src/js/views/file_kanban_renderer.esm.js @@ -0,0 +1,17 @@ +// /** ******************************************************************************** +// Copyright 2020 Creu Blanca +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {FileKanbanRecord} from "./file_kanban_record.esm"; +import {KanbanRenderer} from "@web/views/kanban/kanban_renderer"; + +export class FileKanbanRenderer extends KanbanRenderer { + setup() { + super.setup(); + } +} + +FileKanbanRenderer.components = { + ...KanbanRenderer.components, + KanbanRecord: FileKanbanRecord, +}; diff --git a/dms/static/src/js/views/file_kanban_renderer.xml b/dms/static/src/js/views/file_kanban_renderer.xml new file mode 100644 index 00000000..e0dfc5da --- /dev/null +++ b/dms/static/src/js/views/file_kanban_renderer.xml @@ -0,0 +1,52 @@ + + + + + +
+ +
+
+
+ + + + + + + + + + +
diff --git a/dms/static/src/js/views/file_kanban_view.esm.js b/dms/static/src/js/views/file_kanban_view.esm.js new file mode 100644 index 00000000..0fb1f52b --- /dev/null +++ b/dms/static/src/js/views/file_kanban_view.esm.js @@ -0,0 +1,28 @@ +// /** ******************************************************************************** +// Copyright 2020 Creu Blanca +// Copyright 2017-2019 MuK IT GmbH +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ + +import { + createFileDropZoneExtension, + createFileUploadExtension, +} from "./dms_file_upload.esm"; +import {FileKanbanRenderer} from "./file_kanban_renderer.esm"; +import {KanbanController} from "@web/views/kanban/kanban_controller"; +import {kanbanView} from "@web/views/kanban/kanban_view"; +import {patch} from "@web/core/utils/patch"; +import {registry} from "@web/core/registry"; + +patch(FileKanbanRenderer.prototype, createFileDropZoneExtension()); +patch(KanbanController.prototype, createFileUploadExtension()); +FileKanbanRenderer.template = "dms.KanbanRenderer"; + +export const FileKanbanView = { + ...kanbanView, + buttonTemplate: "dms.KanbanButtons", + Renderer: FileKanbanRenderer, +}; + +registry.category("views").add("file_kanban", FileKanbanView); diff --git a/dms/static/src/js/views/file_list_controller.esm.js b/dms/static/src/js/views/file_list_controller.esm.js new file mode 100644 index 00000000..632dd37c --- /dev/null +++ b/dms/static/src/js/views/file_list_controller.esm.js @@ -0,0 +1,13 @@ +// /** ******************************************************************************** +// Copyright 2020 Creu Blanca +// Copyright 2017-2019 MuK IT GmbH +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ + +import {ListController} from "@web/views/list/list_controller"; + +export class FileListController extends ListController { + setup() { + super.setup(...arguments); + } +} diff --git a/dms/static/src/js/views/file_list_renderer.esm.js b/dms/static/src/js/views/file_list_renderer.esm.js new file mode 100644 index 00000000..08edd549 --- /dev/null +++ b/dms/static/src/js/views/file_list_renderer.esm.js @@ -0,0 +1,16 @@ +// /** ******************************************************************************** +// Copyright 2020 Creu Blanca +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ + +import {ListRenderer} from "@web/views/list/list_renderer"; + +export class FileListRenderer extends ListRenderer { + setup() { + super.setup(); + } +} + +FileListRenderer.components = { + ...FileListRenderer.components, +}; diff --git a/dms/static/src/js/views/file_list_renderer.xml b/dms/static/src/js/views/file_list_renderer.xml new file mode 100644 index 00000000..6a88307b --- /dev/null +++ b/dms/static/src/js/views/file_list_renderer.xml @@ -0,0 +1,48 @@ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + +
diff --git a/dms/static/src/js/views/file_list_view.esm.js b/dms/static/src/js/views/file_list_view.esm.js new file mode 100644 index 00000000..e41dadff --- /dev/null +++ b/dms/static/src/js/views/file_list_view.esm.js @@ -0,0 +1,28 @@ +// /** ******************************************************************************** +// Copyright 2020 Creu Blanca +// Copyright 2017-2019 MuK IT GmbH +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ + +import { + createFileDropZoneExtension, + createFileUploadExtension, +} from "./dms_file_upload.esm"; +import {FileListRenderer} from "./file_list_renderer.esm"; +import {ListController} from "@web/views/list/list_controller"; +import {listView} from "@web/views/list/list_view"; +import {patch} from "@web/core/utils/patch"; +import {registry} from "@web/core/registry"; + +patch(FileListRenderer.prototype, createFileDropZoneExtension()); +patch(ListController.prototype, createFileUploadExtension()); +FileListRenderer.template = "dms.ListRenderer"; + +export const FileListView = { + ...listView, + buttonTemplate: "dms.ListButtons", + Renderer: FileListRenderer, +}; + +registry.category("views").add("file_list", FileListView); diff --git a/dms/static/src/js/views/search_panel.esm.js b/dms/static/src/js/views/search_panel.esm.js new file mode 100644 index 00000000..d71c743b --- /dev/null +++ b/dms/static/src/js/views/search_panel.esm.js @@ -0,0 +1,27 @@ +/* Copyright 2021-2024 Tecnativa - Víctor Martínez + * Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +import {SearchModel} from "@web/search/search_model"; + +export class DMSSearchPanel extends SearchModel { + _getCategoryDomain(excludedCategoryId) { + const domain = super._getCategoryDomain(...arguments); + for (const category of this.categories) { + if (category.id === Number(excludedCategoryId)) { + continue; + } + + // Make sure to filter selected category only for DMS hierarchies, + // not other Odoo models such as product categories + // where child_of could be better than "=" operator + if (category.activeValueId && this.resModel.startsWith("dms")) { + domain.push([category.fieldName, "=", category.activeValueId]); + } + if (domain.length === 0 && this.resModel === "dms.directory") { + domain.push([category.fieldName, "=", false]); + } + } + return domain; + } +} diff --git a/dms/static/src/models/attachment.esm.js b/dms/static/src/models/attachment.esm.js new file mode 100644 index 00000000..6ff6d5bf --- /dev/null +++ b/dms/static/src/models/attachment.esm.js @@ -0,0 +1,87 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {Attachment} from "@mail/core/common/attachment_model"; +import {patch} from "@web/core/utils/patch"; + +patch(Attachment.prototype, { + _handleImage() { + if (this.model_name && this.model_name === "dms.file") { + return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=false`; + } + return `/web/image/${this.id}?signature=${this.checksum}`; + }, + _handlePdf() { + if (this.model_name && this.model_name === "dms.file") { + return ( + "/web/content?id=" + + this.id + + "&field=content&model=dms.file" + + "&filename_field=name" + ); + } + const pdf_lib = `/web/static/lib/pdfjs/web/viewer.html?file=`; + if ( + !this.accessToken && + this.originThread && + this.originThread.model === "mail.channel" + ) { + return `${pdf_lib}/mail/channel/${this.originThread.id}/attachment/${this.id}#pagemode=none`; + } + const accessToken = this.accessToken + ? `?access_token%3D${this.accessToken}` + : ""; + return `${pdf_lib}/web/content/${this.id}${accessToken}#pagemode=none`; + }, + _handleYoutube() { + const urlArr = this.url.split("/"); + let token = urlArr[urlArr.length - 1]; + if (token.includes("watch")) { + token = token.split("v=")[1]; + const amp = token.indexOf("&"); + if (amp !== -1) { + token = token.substring(0, amp); + } + } + return `https://www.youtube.com/embed/${token}`; + }, + get defaultSource() { + if (this.isImage) { + return this._handleImage(); + } + if (this.isPdf) { + return this._handlePdf(); + } + if (this.isUrlYoutube) { + return this._handleYoutube(); + } + if ( + !this.accessToken && + this.originThread && + this.originThread.model === "mail.channel" + ) { + return `/mail/channel/${this.originThread.id}/attachment/${this.id}`; + } + const accessToken = this.accessToken ? `?access_token=${this.accessToken}` : ""; + + if (this.model_name && this.model_name === "dms.file") { + return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name`; + } + return `/web/content/${this.id}${accessToken}`; + }, + get downloadUrl() { + if ( + !this.accessToken && + this.originThread && + this.originThread.model === "mail.channel" + ) { + return `/mail/channel/${this.originThread.id}/attachment/${this.id}?download=true`; + } + if (this.model_name && this.model_name === "dms.file") { + return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=true`; + } + const accessToken = this.accessToken ? `access_token=${this.accessToken}&` : ""; + return `/web/content/ir.attachment/${this.id}/datas?${accessToken}download=true`; + }, +}); diff --git a/dms/static/src/models/attachment_image.esm.js b/dms/static/src/models/attachment_image.esm.js new file mode 100644 index 00000000..308ea8ea --- /dev/null +++ b/dms/static/src/models/attachment_image.esm.js @@ -0,0 +1,33 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {LinkPreview} from "@mail/core/common/link_preview"; +import {patch} from "@web/core/utils/patch"; + +patch(LinkPreview, { + get imageUrl() { + return function compute() { + if (!this.attachment) { + return; + } + if ( + !this.attachment.accessToken && + this.attachment.originThread && + this.attachment.originThread.model === "mail.channel" + ) { + return `/mail/channel/${this.attachment.originThread.id}/image/${this.attachment.id}/${this.width}x${this.height}`; + } + const accessToken = this.attachment.accessToken + ? `?access_token=${this.attachment.accessToken}` + : ""; + if ( + this.attachment.model_name && + this.attachment.model_name === "dms.file" + ) { + return `/web/content?id=${this.attachment.id}&field=content&model=dms.file&filename_field=name&download=false`; + } + return `/web/image/${this.attachment.id}/${this.width}x${this.height}${accessToken}`; + }; + }, +}); diff --git a/dms/static/src/models/attachment_viewer_viewable.esm.js b/dms/static/src/models/attachment_viewer_viewable.esm.js new file mode 100644 index 00000000..7c338ed9 --- /dev/null +++ b/dms/static/src/models/attachment_viewer_viewable.esm.js @@ -0,0 +1,30 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {LinkPreview} from "@mail/core/common/link_preview"; +import {patch} from "@web/core/utils/patch"; + +patch(LinkPreview, { + get imageUrl() { + return function compute() { + if ( + !this.attachmentOwner.accessToken && + this.attachmentOwner.originThread && + this.attachmentOwner.originThread.model === "mail.channel" + ) { + return `/mail/channel/${this.attachmentOwner.originThread.id}/image/${this.attachmentOwner.id}`; + } + const accessToken = this.attachmentOwner.accessToken + ? `?access_token=${this.attachmentOwner.accessToken}` + : ""; + if ( + this.attachmentOwner.model_name && + this.attachmentOwner.model_name === "dms.file" + ) { + return `/web/content?id=${this.attachmentOwner.id}&field=content&model=dms.file&filename_field=name&download=false`; + } + return `/web/image/${this.attachmentOwner.id}${accessToken}`; + }; + }, +}); diff --git a/dms/static/src/scss/portal.scss b/dms/static/src/scss/portal.scss new file mode 100644 index 00000000..870da4be --- /dev/null +++ b/dms/static/src/scss/portal.scss @@ -0,0 +1,12 @@ +/********************************************************************************** +* +* Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +* +**********************************************************************************/ + +.o_portal_contact_img { + width: 2.3em; + height: 2.3em; + object-fit: cover; +} diff --git a/dms/static/tests/tours/dms_portal_tour.esm.js b/dms/static/tests/tours/dms_portal_tour.esm.js new file mode 100644 index 00000000..3a69629e --- /dev/null +++ b/dms/static/tests/tours/dms_portal_tour.esm.js @@ -0,0 +1,42 @@ +// /** ******************************************************************************** +// Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// **********************************************************************************/ +import {registry} from "@web/core/registry"; + +registry.category("web_tour.tours").add("dms_portal_mail_tour", { + url: "/my/dms", + test: true, + steps: () => [ + { + content: "Go to Mails directory", + trigger: ".tr_dms_directory_link:contains('Mails')", + run: "click", + }, + { + content: "Go to Mail_01.eml", + trigger: ".tr_dms_file_link:contains('Mail_01.eml')", + }, + ], +}); + +registry.category("web_tour.tours").add("dms_portal_partners_tour", { + url: "/my/dms", + test: true, + steps: () => [ + { + content: "Go to Partners directory", + trigger: ".tr_dms_directory_link:contains('Partners')", + run: "click", + }, + { + content: "Go to Joel Willis", + trigger: ".tr_dms_directory_link:contains('Joel Willis')", + run: "click", + }, + { + content: "Go to test.txt", + trigger: ".tr_dms_file_link:contains('test.txt')", + }, + ], +}); diff --git a/dms/template/portal.xml b/dms/template/portal.xml new file mode 100644 index 00000000..348a7d6d --- /dev/null +++ b/dms/template/portal.xml @@ -0,0 +1,139 @@ + + + + + + + diff --git a/dms/test/audio01.wav b/dms/test/audio01.wav new file mode 100644 index 00000000..2a479fc1 Binary files /dev/null and b/dms/test/audio01.wav differ diff --git a/dms/test/audio02.wav b/dms/test/audio02.wav new file mode 100644 index 00000000..179a8d3a Binary files /dev/null and b/dms/test/audio02.wav differ diff --git a/dms/test/audio03.mp3 b/dms/test/audio03.mp3 new file mode 100644 index 00000000..397abc2e Binary files /dev/null and b/dms/test/audio03.mp3 differ diff --git a/dms/test/audio04.mp3 b/dms/test/audio04.mp3 new file mode 100644 index 00000000..4667276e Binary files /dev/null and b/dms/test/audio04.mp3 differ diff --git a/dms/test/code01.aj b/dms/test/code01.aj new file mode 100644 index 00000000..bcbd327c --- /dev/null +++ b/dms/test/code01.aj @@ -0,0 +1,10 @@ +// HelloWorld.java +public class HelloWorld { + public static void say(String message) { + System.out.println(message); + } + + public static void sayToPerson(String message, String name) { + System.out.println(name + ", " + message); + } +} diff --git a/dms/test/code02.sh b/dms/test/code02.sh new file mode 100644 index 00000000..35d52ff5 --- /dev/null +++ b/dms/test/code02.sh @@ -0,0 +1,9 @@ +#!/bin/bash +## +## +## Copyright 2017-2019 MuK IT GmbH +## License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +## +## +STR="Hello World!" +echo $STR diff --git a/dms/test/code03.c b/dms/test/code03.c new file mode 100644 index 00000000..36c03ec2 --- /dev/null +++ b/dms/test/code03.c @@ -0,0 +1,12 @@ +/* + * + * Copyright 2017-2019 MuK IT GmbH + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + * + */ +#include + +int main(void) +{ + printf("hello, world\n"); +} diff --git a/dms/test/code04.cc b/dms/test/code04.cc new file mode 100644 index 00000000..0b030629 --- /dev/null +++ b/dms/test/code04.cc @@ -0,0 +1,13 @@ +/* + * + * Copyright 2017-2019 MuK IT GmbH + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + * + */ +#include + +int main() +{ + std::cout << "Hello, world!\n"; + return 0; +} diff --git a/dms/test/code05.cs b/dms/test/code05.cs new file mode 100644 index 00000000..8d94d8de --- /dev/null +++ b/dms/test/code05.cs @@ -0,0 +1,13 @@ +// +// Copyright 2017-2019 MuK IT GmbH +// License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +// +using System; + +class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, world!"); + } +} diff --git a/dms/test/code06.cbl b/dms/test/code06.cbl new file mode 100644 index 00000000..b89e22a9 --- /dev/null +++ b/dms/test/code06.cbl @@ -0,0 +1,5 @@ +IDENTIFICATION DIVISION. +PROGRAM-ID. hello-world. +PROCEDURE DIVISION. + DISPLAY "Hello, world!" + . diff --git a/dms/test/code07.coffee b/dms/test/code07.coffee new file mode 100644 index 00000000..4b65a573 --- /dev/null +++ b/dms/test/code07.coffee @@ -0,0 +1 @@ +console.log "Hello, World!" diff --git a/dms/test/code08.f b/dms/test/code08.f new file mode 100644 index 00000000..bd3dfb11 --- /dev/null +++ b/dms/test/code08.f @@ -0,0 +1,3 @@ +program helloworld + print *, "Hello world!" +end program helloworld diff --git a/dms/test/code09.go b/dms/test/code09.go new file mode 100644 index 00000000..64e44c3e --- /dev/null +++ b/dms/test/code09.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World") +} diff --git a/dms/test/code10.groovy b/dms/test/code10.groovy new file mode 100644 index 00000000..f821e94d --- /dev/null +++ b/dms/test/code10.groovy @@ -0,0 +1,7 @@ +/********************************************************************************** +* +* Copyright 2017-2019 MuK IT GmbH +* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +* +**********************************************************************************/ +println "Hello World" diff --git a/dms/test/code11.java b/dms/test/code11.java new file mode 100644 index 00000000..8678ee37 --- /dev/null +++ b/dms/test/code11.java @@ -0,0 +1,11 @@ +/********************************************************************************** +* +* Copyright 2017-2019 MuK IT GmbH +* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +* +**********************************************************************************/ +class HelloWorldApp { + public static void main(String[] args) { + System.out.println("Hello World!"); // Prints the string to the console. + } +} diff --git a/dms/test/code12.sc b/dms/test/code12.sc new file mode 100644 index 00000000..133c2b06 --- /dev/null +++ b/dms/test/code12.sc @@ -0,0 +1,3 @@ +object HelloWorld extends App { + println("Hello, World!") + } diff --git a/dms/test/document01.pdf b/dms/test/document01.pdf new file mode 100644 index 00000000..99d31cef Binary files /dev/null and b/dms/test/document01.pdf differ diff --git a/dms/test/document02.doc b/dms/test/document02.doc new file mode 100644 index 00000000..9cb3f019 Binary files /dev/null and b/dms/test/document02.doc differ diff --git a/dms/test/document03.odt b/dms/test/document03.odt new file mode 100644 index 00000000..c963be92 Binary files /dev/null and b/dms/test/document03.odt differ diff --git a/dms/test/document04.rtf b/dms/test/document04.rtf new file mode 100644 index 00000000..2379b195 --- /dev/null +++ b/dms/test/document04.rtf @@ -0,0 +1,23 @@ +{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f73\froman\fcharset238\fprq2 Times New Roman CE;}{\f74\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f76\froman\fcharset161\fprq2 Times New Roman Greek;}{\f77\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f78\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f79\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f80\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f81\fswiss\fcharset238\fprq2 Arial CE;}{\f82\fswiss\fcharset204\fprq2 Arial Cyr;} +{\f84\fswiss\fcharset161\fprq2 Arial Greek;}{\f85\fswiss\fcharset162\fprq2 Arial Tur;}{\f86\fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f87\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f88\fswiss\fcharset186\fprq2 Arial Baltic;}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red51\green102\blue255;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning32\cgrid\langnp2057\langfenp1033 +\sbasedon0 \snext0 heading 1;}{\s3\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \b\f1\fs26\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive +Default Paragraph Font;}}{\info{\title The power of technology lies in the ability to match learning styles to the needs of individual learners}{\author Les Mason}{\operator Les Mason}{\creatim\yr2005\mo3\dy15\hr18\min11} +{\revtim\yr2005\mo3\dy15\hr18\min12}{\version1}{\edmins1}{\nofpages1}{\nofwords0}{\nofchars0}{\nofcharsws0}{\vern8203}}\paperw11906\paperh16838 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin +\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1\jexpand\viewkind1\viewscale117\viewzk2\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd +\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7 +\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain +\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning32\cgrid\langnp2057\langfenp1033 { +The power of technology lies in the ability to match learning styles to the needs of individual learners +\par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 { +\par }\pard\plain \s3\ql \li720\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin720\itap0 \b\f1\fs26\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\cf17 The more I study the more I l}{\cf17 earn. +\par The more I learn the more I know +\par The more I know the more I forget +\par The more I forget the less I know +\par So why study?}{ +\par }} diff --git a/dms/test/image01.jpg b/dms/test/image01.jpg new file mode 100644 index 00000000..586ceb89 Binary files /dev/null and b/dms/test/image01.jpg differ diff --git a/dms/test/image02.jpg b/dms/test/image02.jpg new file mode 100644 index 00000000..7467c6f6 Binary files /dev/null and b/dms/test/image02.jpg differ diff --git a/dms/test/image03.jpg b/dms/test/image03.jpg new file mode 100644 index 00000000..a35fc1ae Binary files /dev/null and b/dms/test/image03.jpg differ diff --git a/dms/test/image04.jpg b/dms/test/image04.jpg new file mode 100644 index 00000000..25a3abe2 Binary files /dev/null and b/dms/test/image04.jpg differ diff --git a/dms/test/mail01.eml b/dms/test/mail01.eml new file mode 100644 index 00000000..1a70357f --- /dev/null +++ b/dms/test/mail01.eml @@ -0,0 +1,170 @@ +Return-Path: +To: Manuel Lemos +Subject: Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message +From: mlemos +Reply-To: mlemos +Sender: mlemos@acm.org +X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail) +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf" +Message-ID: <20050430192829.0489.mlemos@acm.org> +Date: Sat, 30 Apr 2005 19:28:29 -0300 + + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc" + + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f" + + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +This is an HTML message. Please use an HTML capable mail program to read +this message. + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + + + +Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H= +TML message + + + + + + + +
+

Testing Manuel Lemos' MIME E-mail composing and sending PHP cla= +ss: HTML message

+
+

Hello Manuel,

+This message is just to let you know that the MIME E-mail message composing and sending PHP class is working as expected.

+

Here is an image embedded in a message as a separate part:

= +
+
Than= +k you,
+mlemos

+
+ + +--69c1683a3ee16ef7cf16edd700694a2f-- + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="logo.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="logo.gif" +Content-ID: + +R0lGODlhlgAjAPMJAAAAAAAA/y8vLz8/P19fX19f339/f4+Pj4+Pz7+/v/////////////////// +/////yH5BAEAAAkALAAAAACWACMAQwT+MMlJq7046827/2AoHYChGAChAkBylgKgKClFyEl6xDMg +qLFBj3C5uXKplVAxIOxkA8BhdFCpDlMK1urMTrZWbAV8tVS5YsxtxmZHBVOSCcW9zaXyNhslVcto +RBp5NQYxLAYGLi8oSwoJBlE+BiSNj5E/PDQsmy4pAJWQLAKJY5+hXhZ2dDYldFWtNSFPiXssXnZR +k5+1pjpBiDMJUXG/Jo7DI4eKfMSmxsJ9GAUB1NXW19jZ2tvc3d7f4OHi2AgZN5vom1kk6F7s6u/p +m3Ab7AOIiCxOyZuBIv8AOeTJIaYQjiR/kKTr5GQNE3pYSjCJ9mUXClRUsLxaZGciC0X+OlpoOuQo +ZKdNJnIoKfnxRUQh6FLG0iLxIoYnJd0JEKISJyAQDodp3EUDC48oDnUY7HFI3wEDRjzycQJVZCQT +Ol7NK+G0qgtkAcOKHUu2rNmzYTVqRMt2bB49bHompSchqg6HcGeANSMxr8sEa2y2HexnSEUTuWri +SSbkYh7BgGVAnhB1b2REibESYaRoBgqIMYx59tFM9AvQffVG49P5NMZkMlHKhJPJb0knmSKZ6kSX +JtbeF3Am7ocok6c7cM7pU5xcXiJJETUz16qPrzEfaFgZpvzn7h86YV5r/1mxXeAUMVyEIpnVUGpN +RlG2ka9b3lP3pm2l6u7P+l/YLj3+RlEHbz1C0kRxSITQaAcilVBMEzmkkEQO8oSOBNg9SN+AX6hV +z1pjgJiAhwCRsY8ZIp6xj1ruqCgeGeKNGEZwLnIwzTg45qjjjjz2GEA5hAUp5JBEFmnkkSCoWEcZ +X8yohZNK1pFGPQS4hx0qNSLJlk9wCQORYu5QiMd7bUzGVyNlRiOHSlpuKdGEItHQ3HZ18beRRyws +YSY/waDTiHf/tWlWUBAJiMJ1/Z0XXU7N0FnREpKM4NChCgbyRDq9XYpOplaKopN9NMkDnBbG+UMC +QwLWIeaiglES6AjGARcPHCWoVAiatcTnGTABZoLPaPG1phccPv366mEvWEFSLnj+2QaonECwcJt/ +e1Zw3lJvVMmftBdVNQS3UngLCA85YHIQOy6JO9N4eZW7KJwtOUZmGwOMWqejwVW6RQzaikRHX3yI +osKhDAq8wmnKSmdMwNidSOof9ZG2DoV0RfTVmLFtGmNk+CoZna0HQnPHS3AhRbIeDpqmR09E0bsu +soeaw994z+rwQVInvqLenBftYjLOVphLFHhV9qsnez8AEUbQRgO737AxChjmyANxuEFHSGi7hFCV +4jxLst2N8sRJYU+SHiAKjlmCgz2IffbLI5aaQR71hnkxq1ZfHSfKata6YDCJDMAQwY7wOgzhjxgj +VFQnKB5uX4mr9qJ79pann+VcfcSzsSCd2mw5scqRRvlQ6TgcUelYhu75iPE4JejrsJOFQAG01277 +7bjnrvvuvPfu++/ABy887hfc6OPxyCevPDdAVoDA89BHL/301Fdv/fXYZ6/99tx3Pz0FEQAAOw== + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="background.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="background.gif" +Content-ID: <4c837ed463ad29c820668e835a270e8a.gif> + +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 +eZmYmZmauZmc2ZlCEQEAOw== + +--6a82fb459dcaacd40ab3404529e808dc-- + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: text/plain; name="attachment.txt" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="attachment.txt" + +VGhpcyBpcyBqdXN0IGEgcGxhaW4gdGV4dCBhdHRhY2htZW50IGZpbGUgbmFtZWQgYXR0YWNobWVu +dC50eHQgLg== + +--652b8c4dcb00cdcdda1e16af36781caf-- diff --git a/dms/test/mail02.eml b/dms/test/mail02.eml new file mode 100644 index 00000000..1427cfae --- /dev/null +++ b/dms/test/mail02.eml @@ -0,0 +1,44 @@ +MIME-Version: 1.0 +Received: by 10.220.191.194 with HTTP; Wed, 11 May 2011 12:27:12 -0700 (PDT) +Date: Wed, 11 May 2011 13:27:12 -0600 +Delivered-To: jncjkq@gmail.com +Message-ID: +Subject: Test +From: Bill Jncjkq +To: bookmarks@jncjkq.net +Content-Type: multipart/mixed; boundary=bcaec54eecc63acce904a3050f79 + +--bcaec54eecc63acce904a3050f79 +Content-Type: multipart/alternative; boundary=bcaec54eecc63acce604a3050f77 + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/plain; charset=ISO-8859-1 + +-- +Bill Jncjkq + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/html; charset=ISO-8859-1 + +
--
Bill Jncjkq
+ +--bcaec54eecc63acce604a3050f77-- +--bcaec54eecc63acce904a3050f79 +Content-Type: text/html; charset=US-ASCII; name="bookmarks-really-short.html" +Content-Disposition: attachment; filename="bookmarks-really-short.html" +Content-Transfer-Encoding: base64 +X-Attachment-Id: f_gnknv6u70 + +PCFET0NUWVBFIE5FVFNDQVBFLUJvb2ttYXJrLWZpbGUtMT4KCTxIVE1MPgoJPE1FVEEgSFRUUC1F +UVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoJ +PFRpdGxlPkJvb2ttYXJrczwvVGl0bGU+Cgk8SDE+Qm9va21hcmtzPC9IMT4KCQk8RFQ+PEgzIEZP +TERFRD5UZWNoIE5ld3M8L0gzPgoJCTxETD48cD4KCQkJPERUPjxBIEhSRUY9Imh0dHA6Ly93d3cu +Y25ldC5jb20vIj5DTmV0PC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53aXJlZC5jb20v +Ij5XaXJlZCBOZXdzPC9BPgoJCTwvREw+PHA+CgkJPERUPjxIMyBGT0xERUQ+VG9vbHMgYW5kIFJl +ZmVyZW5jZTwvSDM+CgkJPERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy5tb25zdGVy +LmNvbS8iPk1vbnN0ZXIuY29tPC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53ZWJtZC5j +b20vIj5XZWJNRDwvQT4KCQk8L0RMPjxwPgoJCTxEVD48SDMgRk9MREVEPlRyYXZlbDwvSDM+CgkJ +PERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL2ZvZG9ycy5jb20vIj5Gb2RvcnM8L0E+CgkJ +CTxEVD48QSBIUkVGPSJodHRwOi8vd3d3LnRyYXZlbG9jaXR5LmNvbS8iPlRyYXZlbG9jaXR5PC9B +PgoJCTwvREw+PHA+Cgk8L0RMPjxwPgo8L0hUTUw+ +--bcaec54eecc63acce904a3050f79-- diff --git a/dms/test/markdown.md b/dms/test/markdown.md new file mode 100644 index 00000000..721d2b1a --- /dev/null +++ b/dms/test/markdown.md @@ -0,0 +1,138 @@ +# An h1 header + +Paragraphs are separated by a blank line. + +2nd paragraph. _Italic_, **bold**, and `monospace`. Itemized lists look like: + +- this one +- that one +- the other one + +Note that --- not considering the asterisk --- the actual text content starts at +4-columns in. + +> Block quotes are written like so. +> +> They can span multiple paragraphs, if you like. + +Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all in chapters +12--14"). Three dots ... will be converted to an ellipsis. Unicode is supported. + +## An h2 header + +Here's a numbered list: + +1. first item +2. second item +3. third item + +Note again how the actual text starts at 4 columns in (4 characters from the left side). +Here's a code sample: + + # Let me re-iterate ... + for i in 1 .. 10 { do-something(i) } + +As you probably guessed, indented 4 spaces. By the way, instead of indenting the block, +you can use delimited blocks, if you like: + +``` +define foobar() { + print "Welcome to flavor country!"; +} +``` + +(which makes copying & pasting easier). You can optionally mark the delimited block for +Pandoc to syntax highlight it: + +```python +import time +# Quick, count to ten! +for i in range(10): + # (but not *too* quick) + time.sleep(0.5) + print i +``` + +### An h3 header + +Now a nested list: + +1. First, get these ingredients: + + - carrots + - celery + - lentils + +2. Boil some water. + +3. Dump everything in the pot and follow this algorithm: + + find wooden spoon + uncover pot + stir + cover pot + balance wooden spoon precariously on pot handle + wait 10 minutes + goto first step (or shut off burner when done) + + Do not bump wooden spoon or it will fall. + +Notice again how text always lines up on 4-space indents (including that last line which +continues item 3 above). + +Here's a link to [a website](http://foo.bar), to a [local doc](local-doc.html), and to a +[section heading in the current doc](#an-h2-header). Here's a footnote [^1]. + +[^1]: Footnote text goes here. + +Tables can look like this: + +size material color + +--- + +9 leather brown 10 hemp canvas natural 11 glass transparent + +Table: Shoes, their sizes, and what they're made of + +(The above is the caption for the table.) Pandoc also supports multi-line tables: + +--- + +keyword text + +--- + +red Sunsets, apples, and other red or reddish things. + +green Leaves, grass, frogs and other things it's not easy being. + +--- + +A horizontal rule follows. + +--- + +Here's a definition list: + +apples : Good for making applesauce. oranges : Citrus! tomatoes : There's no "e" in +tomatoe. + +Again, text is indented 4 spaces. (Put a blank line between each term/definition pair to +spread things out more.) + +Here's a "line block": + +| Line one | Line too | Line tree + +and images can be specified like so: + +![example image](example-image.jpg "An exemplary image") + +Inline math equations go in like so: $\omega = d\phi / dt$. Display math should get its +own line and be put in in double-dollarsigns: + +$$I = \int \rho R^{2} dV$$ + +And note that you can backslash-escape any punctuation characters which you wish to be +displayed literally, ex.: \`foo\`, \*bar\*, etc. diff --git a/dms/test/sheet01.xls b/dms/test/sheet01.xls new file mode 100644 index 00000000..795ff7c4 Binary files /dev/null and b/dms/test/sheet01.xls differ diff --git a/dms/test/sheet02.csv b/dms/test/sheet02.csv new file mode 100644 index 00000000..f9cf3866 --- /dev/null +++ b/dms/test/sheet02.csv @@ -0,0 +1,100 @@ +1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8 +2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58 +3,"Cardinal Slant-D Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 +4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58 +5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5 +6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37 +7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 +8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization, +9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization, +10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38 +11,Xerox 1980,Neola Schneider,807,-166.85,4.28,6.18,Nunavut,Paper,0.4 +12,Advantus Map Pennant Flags and Round Head Tacks,Neola Schneider,807,-14.33,3.95,2,Nunavut,Rubber Bands,0.53 +13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5 +14,"DS/HD IBM Formatted Diskettes, 200/Pack - Staples",Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71 +15,"Wilson Jones 1"" Hanging DublLock Ring Binders",Claudia Miner,933,-4.72,5.28,2.99,Nunavut,Binders and Binder Accessories,0.37 +16,Ultra Commercial Grade Dual Valve Door Closer,Neola Schneider,995,782.91,39.89,3.04,Nunavut,Office Furnishings,0.53 +17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.80,15.74,1.39,Nunavut,Envelopes,0.4 +18,Hon 4-Shelf Metal Bookcases,Sylvia Foulston,1154,440.72,100.98,26.22,Nunavut,Bookcases,0.6 +19,"Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table",Sylvia Foulston,1154,-481.04,71.37,69,Nunavut,Tables,0.68 +20,g520,Jim Radford,1344,-11.68,65.99,5.26,Nunavut,Telephones and Communication,0.59 +21,LX 788,Jim Radford,1344,313.58,155.99,8.99,Nunavut,Telephones and Communication,0.58 +22,Avery 52,Carlos Soltero,1412,26.92,3.69,0.5,Nunavut,Labels,0.38 +23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,1412,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8 +24,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Carl Ludwig,1539,-172.88,15.99,13.18,Nunavut,Binders and Binder Accessories,0.37 +25,"Maxell 3.5"" DS/HD IBM-Formatted Diskettes, 10/Pack",Carl Ludwig,1539,-144.55,4.89,4.93,Nunavut,Computer Peripherals,0.66 +26,Newell 335,Don Miller,1540,5.76,2.88,0.7,Nunavut,Pens & Art Supplies,0.56 +27,SANFORD Liquid Accent Tank-Style Highlighters,Annie Cyprus,1702,4.90,2.84,0.93,Nunavut,Pens & Art Supplies,0.54 +28,Canon PC940 Copier,Carl Ludwig,1761,-547.61,449.99,49,Nunavut,Copiers and Fax,0.38 +29,"Tenex Personal Project File with Scoop Front Design, Black",Carlos Soltero,1792,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59 +30,Col-Erase Pencils with Erasers,Grant Carroll,2275,41.67,6.08,1.17,Nunavut,Pens & Art Supplies,0.56 +31,"Imation 3.5"" DS/HD IBM Formatted Diskettes, 10/Pack",Don Miller,2277,-46.03,5.98,4.38,Nunavut,Computer Peripherals,0.75 +32,"White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11",Don Miller,2277,33.67,40.99,19.99,Nunavut,Paper,0.36 +33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38 +34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81 +35,Fuji 5.2GB DVD-RAM,Jack Garza,2631,252.66,40.96,1.99,Nunavut,Computer Peripherals,0.55 +36,Bevis Steel Folding Chairs,Julia West,2757,-1766.01,95.95,74.35,Nunavut,Chairs & Chairmats,0.57 +37,Avery Binder Labels,Eugene Barchas,2791,-236.27,3.89,7.01,Nunavut,Binders and Binder Accessories,0.37 +38,Hon Every-Day Chair Series Swivel Task Chairs,Eugene Barchas,2791,80.44,120.98,30,Nunavut,Chairs & Chairmats,0.64 +39,"IBM Multi-Purpose Copy Paper, 8 1/2 x 11"", Case",Eugene Barchas,2791,118.94,30.98,5.76,Nunavut,Paper,0.4 +40,Global Troy Executive Leather Low-Back Tilter,Edward Hooks,2976,3424.22,500.98,26,Nunavut,Chairs & Chairmats,0.6 +41,XtraLife ClearVue Slant-D Ring Binders by Cardinal,Brad Eason,3232,-11.83,7.84,4.71,Nunavut,Binders and Binder Accessories,0.35 +42,Computer Printout Paper with Letter-Trim Perforations,Nicole Hansen,3524,52.35,18.97,9.03,Nunavut,Paper,0.37 +43,6160,Dorothy Wardle,3908,-180.20,115.99,2.5,Nunavut,Telephones and Communication,0.57 +44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36 +45,Hoover Portapower Portable Vacuum,Jim Radford,4612,-375.64,4.48,49,Nunavut,Appliances,0.6 +46,Timeport L7089,Annie Cyprus,4676,-104.25,125.99,7.69,Nunavut,Telephones and Communication,0.58 +47,Avery 510,Annie Cyprus,4676,85.96,3.75,0.5,Nunavut,Labels,0.37 +48,Xerox 1881,Annie Cyprus,4676,-8.38,12.28,6.47,Nunavut,Paper,0.38 +49,LX 788,Annie Cyprus,4676,1115.69,155.99,8.99,Nunavut,Telephones and Communication,0.58 +50,"Cardinal Slant-D Ring Binder, Heavy Gauge Vinyl",Annie Cyprus,5284,-3.05,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39 +51,"Memorex 4.7GB DVD-RAM, 3/Pack",Clay Rozendal,5316,514.07,31.78,1.99,Nunavut,Computer Peripherals,0.42 +52,Unpadded Memo Slips,Don Jones,5409,-7.04,3.98,2.97,Nunavut,Paper,0.35 +53,"Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4""X8 1/2"", 300/Messages",Beth Thompson,5506,4.41,5.88,3.04,Nunavut,Paper,0.36 +54,"Eldon Expressions Desk Accessory, Wood Pencil Holder, Oak",Frank Price,5569,-0.06,9.65,6.22,Nunavut,Office Furnishings,0.55 +55,Bell Sonecor JB700 Caller ID,Michelle Lonsdale,5607,-50.33,7.99,5.03,Nunavut,Telephones and Communication,0.6 +56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38 +57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55 +58,"Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting",Joy Bell,5925,-354.90,92.23,39.61,Nunavut,Office Furnishings,0.67 +59,Accessory4,Joy Bell,5925,-267.01,85.99,0.99,Nunavut,Telephones and Communication,0.85 +60,Personal Creations Ink Jet Cards and Labels,Skye Norling,6016,3.63,11.48,5.43,Nunavut,Paper,0.36 +61,High Speed Automatic Electric Letter Opener,Barry Weirich,6116,-1759.58,1637.53,24.49,Nunavut,"Scissors, Rulers and Trimmers",0.81 +62,Xerox 1966,Grant Carroll,6182,-116.79,6.48,6.65,Nunavut,Paper,0.36 +63,Xerox 213,Grant Carroll,6182,-67.28,6.48,7.86,Nunavut,Paper,0.37 +64,"Boston Electric Pencil Sharpener, Model 1818, Charcoal Black",Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57 +65,Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright),Skye Norling,6884,-61.21,4.98,4.75,Nunavut,Paper,0.36 +66,"Telephone Message Books with Fax/Mobile Section, 5 1/2"" x 3 3/16""",Skye Norling,6884,119.09,6.35,1.02,Nunavut,Paper,0.39 +67,Crate-A-Files,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59 +68,"Angle-D Binders with Locking Rings, Label Holders",Ralph Knight,6980,-77.28,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38 +69,"80 Minute CD-R Spindle, 100/Pack - Staples",Dorothy Wardle,6982,407.44,39.48,1.99,Nunavut,Computer Peripherals,0.54 +70,"Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled",Dorothy Wardle,6982,-338.27,100.98,57.38,Nunavut,Bookcases,0.78 +71,12-1/2 Diameter Round Wall Clock,Dorothy Wardle,6982,52.56,19.98,10.49,Nunavut,Office Furnishings,0.49 +72,SAFCO Arco Folding Chair,Grant Carroll,7110,1902.24,276.2,24.49,Nunavut,Chairs & Chairmats, +73,"#10 White Business Envelopes,4 1/8 x 9 1/2",Barry Weirich,7430,353.20,15.67,1.39,Nunavut,Envelopes,0.38 +74,3M Office Air Cleaner,Beth Paige,7906,271.78,25.98,5.37,Nunavut,Appliances,0.5 +75,"Global Leather and Oak Executive Chair, Black",Sylvia Foulston,8391,-268.36,300.98,64.73,Nunavut,Chairs & Chairmats,0.56 +76,Xerox 1936,Nicole Hansen,8419,70.39,19.98,5.97,Nunavut,Paper,0.38 +77,Xerox 214,Nicole Hansen,8419,-86.62,6.48,7.03,Nunavut,Paper,0.37 +78,Carina Double Wide Media Storage Towers in Natural & Black,Nicole Hansen,8833,-846.73,80.98,35,Nunavut,Storage & Organization,0.81 +79,Staples General Use 3-Ring Binders,Beth Paige,8995,8.05,1.88,1.49,Nunavut,Binders and Binder Accessories,0.37 +80,Xerox 1904,Beth Paige,8995,-78.02,6.48,5.86,Northwest Territories,Paper,0.36 +81,Luxo Professional Combination Clamp-On Lamps,Beth Paige,8995,737.94,102.3,21.26,Northwest Territories,Office Furnishings,0.59 +82,Xerox 217,Beth Paige,8995,-191.28,6.48,8.19,Northwest Territories,Paper,0.37 +83,Revere Boxed Rubber Bands by Revere,Beth Paige,8995,-21.49,1.89,0.76,Northwest Territories,Rubber Bands,0.83 +84,"Acco Smartsocket Table Surge Protector, 6 Color-Coded Adapter Outlets",Sylvia Foulston,9126,884.08,62.05,3.99,Northwest Territories,Appliances,0.55 +85,"Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units",Bryan Davis,9127,-329.49,279.48,35,Northwest Territories,Storage & Organization,0.8 +86,Hon 4070 Series Pagoda Round Back Stacking Chairs,Joy Bell,9509,2825.15,320.98,58.95,Northwest Territories,Chairs & Chairmats,0.57 +87,Xerox 1887,Joy Bell,9509,2.13,18.97,5.21,Northwest Territories,Paper,0.37 +88,Xerox 1891,Joy Bell,9509,707.15,48.91,5.81,Northwest Territories,Paper,0.38 +89,Avery 506,Alan Barnes,9763,75.13,4.13,0.5,Northwest Territories,Labels,0.39 +90,"Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order",Grant Carroll,9927,-270.63,140.98,53.48,Northwest Territories,Bookcases,0.65 +91,"Lifetime Advantage Folding Chairs, 4/Carton",Grant Carroll,9927,3387.35,218.08,18.06,Northwest Territories,Chairs & Chairmats,0.57 +92,Microsoft Natural Multimedia Keyboard,Grant Carroll,9927,-82.16,50.98,6.5,Northwest Territories,Computer Peripherals,0.73 +93,"Staples Wirebound Steno Books, 6"" x 9"", 12/Pack",Delfina Latchford,10022,-3.88,10.14,2.27,Northwest Territories,Paper,0.36 +94,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Don Jones,10437,-191.22,15.99,13.18,Northwest Territories,Binders and Binder Accessories,0.37 +95,Bevis Boat-Shaped Conference Table,Doug Bickford,10499,31.21,262.11,62.74,Northwest Territories,Tables,0.75 +96,"Linden 12"" Wall Clock With Oak Frame",Doug Bickford,10535,-44.14,33.98,19.99,Northwest Territories,Office Furnishings,0.55 +97,Newell 326,Doug Bickford,10535,-0.79,1.76,0.7,Northwest Territories,Pens & Art Supplies,0.56 +98,Prismacolor Color Pencil Set,Jamie Kunitz,10789,76.42,19.84,4.1,Northwest Territories,Pens & Art Supplies,0.44 +99,Xerox Blank Computer Paper,Anthony Johnson,10791,93.36,19.98,5.77,Northwest Territories,Paper,0.38 +100,600 Series Flip,Ralph Knight,10945,4.22,95.99,8.99,Northwest Territories,Telephones and Communication,0.57 diff --git a/dms/test/sheet03.ods b/dms/test/sheet03.ods new file mode 100644 index 00000000..b0c9c683 Binary files /dev/null and b/dms/test/sheet03.ods differ diff --git a/dms/test/slide01.odp b/dms/test/slide01.odp new file mode 100644 index 00000000..bf8cb46e Binary files /dev/null and b/dms/test/slide01.odp differ diff --git a/dms/test/slide02.ppt b/dms/test/slide02.ppt new file mode 100644 index 00000000..0cd4ac59 Binary files /dev/null and b/dms/test/slide02.ppt differ diff --git a/dms/test/text.rst b/dms/test/text.rst new file mode 100644 index 00000000..da5445c9 --- /dev/null +++ b/dms/test/text.rst @@ -0,0 +1,382 @@ +A ReStructuredText Primer +========================= + +:Author: Richard Jones +:Version: $Revision: 5801 $ +:Copyright: This document has been placed in the public domain. + +.. contents:: + + +The text below **contains** links that look like "(quickref__)". These +are relative links that point to the `Quick reStructuredText`_ user +reference. If these links don't work, please refer to the `master +quick reference`_ document. + +__ +.. _Quick reStructuredText: quickref.html +.. _master quick reference: + http://docutils.sourceforge.net/docs/user/rst/quickref.html + +.. Note:: This document is an informal introduction to + reStructuredText. + + +Structure +--------- + +From the **outset**, let me say that "Structured Text" is probably a bit +of a misnomer. It's more like "Relaxed Text" that uses certain +consistent patterns. These patterns are interpreted by a HTML +converter to produce "Very Structured Text" that can be used by a web +browser. + +The most basic pattern recognised is a **paragraph** (quickref__). +That's a chunk of text that is separated by blank lines (one is +enough). Paragraphs must have the same indentation -- that is, line +up at their left edge. Paragraphs that start indented will result in +indented quote paragraphs. For example:: + + This is a paragraph. It's quite + short. + + This paragraph will result in an indented block of + text, typically used for quoting other text. + + This is another one. + +Results in: + + This is a paragraph. It's quite + short. + + This paragraph will result in an indented block of + text, typically used for quoting other text. + + This is another one. + +__ quickref.html#paragraphs + + +Text styles +----------- + +(quickref__) + +__ quickref.html#inline-markup + +Inside paragraphs and other bodies of text, you may additionally mark +text for *italics* with "``*italics*``" or **bold** with +"``**bold**``". This is called "inline markup". + +If you want something to appear as a fixed-space literal, use +"````double back-quotes````". Note that no further fiddling is done +inside the double back-quotes -- so asterisks "``*``" etc. are left +alone. + +If you find that you want to use one of the "special" characters in +text, it will generally be OK -- reStructuredText is pretty smart. +For example, this lone asterisk * is handled just fine, as is the +asterisk in this equation: 5*6=30. If you actually +want text \*surrounded by asterisks* to **not** be italicised, then +you need to indicate that the asterisk is not special. You do this by +placing a backslash just before it, like so "``\*``" (quickref__), or +by enclosing it in double back-quotes (inline literals), like this:: + + ``*`` + +__ quickref.html#escaping + +.. Tip:: Think of inline markup as a form of (parentheses) and use it + the same way: immediately before and after the text being marked + up. Inline markup by itself (surrounded by whitespace) or in the + middle of a word won't be recognized. See the `markup spec`__ for + full details. + +__ ../../ref/rst/restructuredtext.html#inline-markup + + +Lists +----- + +Lists of items come in three main flavours: **enumerated**, +**bulleted** and **definitions**. In all list cases, you may have as +many paragraphs, sublists, etc. as you want, as long as the left-hand +side of the paragraph or whatever aligns with the first line of text +in the list item. + +Lists must always start a new paragraph -- that is, they must appear +after a blank line. + +**enumerated** lists (numbers, letters or roman numerals; quickref__) + __ quickref.html#enumerated-lists + + Start a line off with a number or letter followed by a period ".", + right bracket ")" or surrounded by brackets "( )" -- whatever you're + comfortable with. All of the following forms are recognised:: + + 1. numbers + + A. upper-case letters + and it goes over many lines + + with two paragraphs and all! + + a. lower-case letters + + 1. with a sub-list starting at a different number + 2. make sure the numbers are in the correct sequence though! + + I. upper-case roman numerals + + i. lower-case roman numerals + + (1) numbers again + + 1) and again + + Results in (note: the different enumerated list styles are not + always supported by every web browser, so you may not get the full + effect here): + + 1. numbers + + A. upper-case letters + and it goes over many lines + + with two paragraphs and all! + + a. lower-case letters + + 1. with a sub-list starting at a different number + 2. make sure the numbers are in the correct sequence though! + + I. upper-case roman numerals + + i. lower-case roman numerals + + (1) numbers again + + 1) and again + +**bulleted** lists (quickref__) + __ quickref.html#bullet-lists + + Just like enumerated lists, start the line off with a bullet point + character - either "-", "+" or "*":: + + * a bullet point using "*" + + - a sub-list using "-" + + + yet another sub-list + + - another item + + Results in: + + * a bullet point using "*" + + - a sub-list using "-" + + + yet another sub-list + + - another item + +**definition** lists (quickref__) + __ quickref.html#definition-lists + + Unlike the other two, the definition lists consist of a term, and + the definition of that term. The format of a definition list is:: + + what + Definition lists associate a term with a definition. + + *how* + The term is a one-line phrase, and the definition is one or more + paragraphs or body elements, indented relative to the term. + Blank lines are not allowed between term and definition. + + Results in: + + what + Definition lists associate a term with a definition. + + *how* + The term is a one-line phrase, and the definition is one or more + paragraphs or body elements, indented relative to the term. + Blank lines are not allowed between term and definition. + + +Preformatting (code samples) +---------------------------- +(quickref__) + +__ quickref.html#literal-blocks + +To just include a chunk of preformatted, never-to-be-fiddled-with +text, finish the prior paragraph with "``::``". The preformatted +block is finished when the text falls back to the same indentation +level as a paragraph prior to the preformatted block. For example:: + + An example:: + + Whitespace, newlines, blank lines, and all kinds of markup + (like *this* or \this) is preserved by literal blocks. + Lookie here, I've dropped an indentation level + (but not far enough) + + no more example + +Results in: + + An example:: + + Whitespace, newlines, blank lines, and all kinds of markup + (like *this* or \this) is preserved by literal blocks. + Lookie here, I've dropped an indentation level + (but not far enough) + + no more example + +Note that if a paragraph consists only of "``::``", then it's removed +from the output:: + + :: + + This is preformatted text, and the + last "::" paragraph is removed + +Results in: + +:: + + This is preformatted text, and the + last "::" paragraph is removed + + +Sections +-------- + +(quickref__) + +__ quickref.html#section-structure + +To break longer text up into sections, you use **section headers**. +These are a single line of text (one or more words) with adornment: an +underline alone, or an underline and an overline together, in dashes +"``-----``", equals "``======``", tildes "``~~~~~~``" or any of the +non-alphanumeric characters ``= - ` : ' " ~ ^ _ * + # < >`` that you +feel comfortable with. An underline-only adornment is distinct from +an overline-and-underline adornment using the same character. The +underline/overline must be at least as long as the title text. Be +consistent, since all sections marked with the same adornment style +are deemed to be at the same level:: + + Chapter 1 Title + =============== + + Section 1.1 Title + ----------------- + + Subsection 1.1.1 Title + ~~~~~~~~~~~~~~~~~~~~~~ + + Section 1.2 Title + ----------------- + + Chapter 2 Title + =============== + +This results in the following structure, illustrated by simplified +pseudo-XML:: + +
+ + Chapter 1 Title + <section> + <title> + Section 1.1 Title + <section> + <title> + Subsection 1.1.1 Title + <section> + <title> + Section 1.2 Title + <section> + <title> + Chapter 2 Title + +(Pseudo-XML uses indentation for nesting and has no end-tags. It's +not possible to show actual processed output, as in the other +examples, because sections cannot exist inside block quotes. For a +concrete example, compare the section structure of this document's +source text and processed output.) + +Note that section headers are available as link targets, just using +their name. To link to the Lists_ heading, I write "``Lists_``". If +the heading has a space in it like `text styles`_, we need to quote +the heading "```text styles`_``". + + +Document Title / Subtitle +````````````````````````` + +The title of the whole document is distinct from section titles and +may be formatted somewhat differently (e.g. the HTML writer by default +shows it as a centered heading). + +To indicate the document title in reStructuredText, use a unique adornment +style at the beginning of the document. To indicate the document subtitle, +use another unique adornment style immediately after the document title. For +example:: + + ================ + Document Title + ================ + ---------- + Subtitle + ---------- + + Section Title + ============= + + ... + +Note that "Document Title" and "Section Title" above both use equals +signs, but are distict and unrelated styles. The text of +overline-and-underlined titles (but not underlined-only) may be inset +for aesthetics. + + +Images +------ + +(quickref__) + +__ quickref.html#directives + +To include an image in your document, you use the the ``image`` directive__. +For example:: + + .. image:: https://picsum.photos/200/300/?random + +results in: + +.. image:: https://picsum.photos/200/300/?random + +The ``images/biohazard.png`` part indicates the filename of the image +you wish to appear in the document. There's no restriction placed on +the image (format, size etc). If the image is to appear in HTML and +you wish to supply additional information, you may:: + + .. image:: images/biohazard.png + :height: 100 + :width: 200 + :scale: 50 + :alt: alternate text + +See the full `image directive documentation`__ for more info. + +__ ../../ref/rst/directives.html +__ ../../ref/rst/directives.html#images diff --git a/dms/test/text.txt b/dms/test/text.txt new file mode 100644 index 00000000..e0f98f53 --- /dev/null +++ b/dms/test/text.txt @@ -0,0 +1,27 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus condimentum sagittis lacus, laoreet luctus ligula laoreet ut. Vestibulum ullamcorper accumsan velit vel vehicula. Proin tempor lacus arcu. Nunc at elit condimentum, semper nisi et, condimentum mi. In venenatis blandit nibh at sollicitudin. Vestibulum dapibus mauris at orci maximus pellentesque. Nullam id elementum ipsum. Suspendisse cursus lobortis viverra. Proin et erat at mauris tincidunt porttitor vitae ac dui. + +Donec vulputate lorem tortor, nec fermentum nibh bibendum vel. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent dictum luctus massa, non euismod lacus. Pellentesque condimentum dolor est, ut dapibus lectus luctus ac. Ut sagittis commodo arcu. Integer nisi nulla, facilisis sit amet nulla quis, eleifend suscipit purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam euismod ultrices lorem, sit amet imperdiet est tincidunt vel. Phasellus dictum justo sit amet ligula varius aliquet auctor et metus. Fusce vitae tortor et nisi pulvinar vestibulum eget in risus. Donec ante ex, placerat a lorem eget, ultricies bibendum purus. Nam sit amet neque non ante laoreet rutrum. Nullam aliquet commodo urna, sed ullamcorper odio feugiat id. Mauris nisi sapien, porttitor in condimentum nec, venenatis eu urna. Pellentesque feugiat diam est, at rhoncus orci porttitor non. + +Nulla luctus sem sit amet nisi consequat, id ornare ipsum dignissim. Sed elementum elit nibh, eu condimentum orci viverra quis. Aenean suscipit vitae felis non suscipit. Suspendisse pharetra turpis non eros semper dictum. Etiam tincidunt venenatis venenatis. Praesent eget gravida lorem, ut congue diam. Etiam facilisis elit at porttitor egestas. Praesent consequat, velit non vulputate convallis, ligula diam sagittis urna, in venenatis nisi justo ut mauris. Vestibulum posuere sollicitudin mi, et vulputate nisl fringilla non. Nulla ornare pretium velit a euismod. Nunc sagittis venenatis vestibulum. Nunc sodales libero a est ornare ultricies. Sed sed leo sed orci pellentesque ultrices. Mauris sollicitudin, sem quis placerat ornare, velit arcu convallis ligula, pretium finibus nisl sapien vel sem. Vivamus sit amet tortor id lorem consequat hendrerit. Nullam at dui risus. + +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed feugiat semper velit consequat facilisis. Etiam facilisis justo non iaculis dictum. Fusce turpis neque, pharetra ut odio eu, hendrerit rhoncus lacus. Nunc orci felis, imperdiet vel interdum quis, porta eu ipsum. Pellentesque dictum sem lacinia, auctor dui in, malesuada nunc. Maecenas sit amet mollis eros. Proin fringilla viverra ligula, sollicitudin viverra ante sollicitudin congue. Donec mollis felis eu libero malesuada, et lacinia risus interdum. + +Etiam vitae accumsan augue. Ut urna orci, malesuada ut nisi a, condimentum gravida magna. Nulla bibendum ex in vulputate sagittis. Nulla facilisi. Nullam faucibus et metus ac consequat. Quisque tempor eros velit, id mattis nibh aliquet a. Aenean tempor elit ut finibus auctor. Sed at imperdiet mauris. Vestibulum pharetra non lacus sed pulvinar. Sed pellentesque magna a eros volutpat ullamcorper. In hac habitasse platea dictumst. Donec ipsum mi, feugiat in eros sed, varius lacinia turpis. Donec vulputate tincidunt dui ac laoreet. Sed in eros dui. Pellentesque placerat tristique ligula eu finibus. Proin nec faucibus felis, eu commodo ipsum. + +Integer eu hendrerit diam, sed consectetur nunc. Aliquam a sem vitae leo fermentum faucibus quis at sem. Etiam blandit, quam quis fermentum varius, ante urna ultricies lectus, vel pellentesque ligula arcu nec elit. Donec placerat ante in enim scelerisque pretium. Donec et rhoncus erat. Aenean tempor nisi vitae augue tincidunt luctus. Nam condimentum dictum ante, et laoreet neque pellentesque id. Curabitur consectetur cursus neque aliquam porta. Ut interdum nunc nec nibh vestibulum, in sagittis metus facilisis. Pellentesque feugiat condimentum metus. Etiam venenatis quam at ante rhoncus vestibulum. Maecenas suscipit congue pellentesque. Vestibulum suscipit scelerisque fermentum. Nulla iaculis risus ac vulputate porttitor. + +Mauris nec metus vel dolor blandit faucibus et vel magna. Ut tincidunt ipsum non nunc dapibus, sed blandit mi condimentum. Quisque pharetra interdum quam nec feugiat. Sed pellentesque nulla et turpis blandit interdum. Curabitur at metus vitae augue elementum viverra. Sed mattis lorem non enim fermentum finibus. Sed at dui in magna dignissim accumsan. Proin tincidunt ultricies cursus. Maecenas tincidunt magna at urna faucibus lacinia. + +Quisque venenatis justo sit amet tortor condimentum, nec tincidunt tellus viverra. Morbi risus ipsum, consequat convallis malesuada non, fermentum non velit. Nulla facilisis orci eget ligula mattis fermentum. Aliquam vel velit ultricies, sollicitudin nibh eu, congue velit. Donec nulla lorem, euismod id cursus at, sollicitudin et arcu. Proin vitae tincidunt ipsum. Vivamus elementum eleifend justo, placerat interdum nulla rutrum id. + +Phasellus fringilla luctus magna, a finibus justo dapibus a. Nam risus felis, rhoncus eget diam sit amet, congue facilisis nibh. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent consequat euismod diam, eget volutpat magna convallis at. Mauris placerat pellentesque imperdiet. Nulla porta scelerisque enim, et scelerisque neque bibendum in. Proin eget turpis nisi. Suspendisse ut est a erat egestas eleifend at euismod arcu. Donec aliquet, nisi sed faucibus condimentum, nisi metus dictum eros, nec dignissim justo odio id nulla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas sollicitudin, justo id elementum eleifend, justo neque aliquet nibh, finibus malesuada metus erat eget neque. Suspendisse nec auctor orci. Aenean et vestibulum nulla. Nullam hendrerit augue tristique, commodo metus id, sodales lorem. Etiam feugiat dui est, vitae auctor risus convallis non. + +Maecenas turpis enim, consectetur eget lectus eu, hendrerit posuere lacus. Praesent efficitur, felis eget dapibus consectetur, nisi massa dignissim enim, nec semper dolor est eu urna. Nullam ut sodales lorem. Aliquam dapibus faucibus diam. Vestibulum vel magna et dolor gravida imperdiet ut sit amet sem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur elementum metus tincidunt nulla euismod ultricies. Duis elementum nec neque in porttitor. Nulla sagittis lorem elit, et consectetur ante laoreet eu. Maecenas nulla tellus, scelerisque ac erat sed, fermentum dapibus metus. Donec tincidunt fermentum molestie. + +Sed consequat mi at maximus faucibus. Pellentesque aliquet tincidunt sapien vel auctor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent accumsan nunc eget leo aliquam, facilisis hendrerit turpis egestas. Morbi in ultricies mauris, a eleifend turpis. Quisque fringilla massa iaculis risus ultrices, sit amet tincidunt dui varius. Quisque maximus porta tristique. Proin tincidunt, turpis ut tempor pretium, lectus ipsum ullamcorper leo, ac tincidunt felis dui non leo. Aenean porta augue ligula, non consequat ipsum aliquet et. Suspendisse ut suscipit ex. Pellentesque vitae lacinia arcu. Curabitur eget tincidunt nulla, non bibendum metus. Nullam mi ipsum, eleifend vitae tortor pulvinar, facilisis sollicitudin ipsum. + +Vestibulum molestie risus lorem, at feugiat lorem congue sed. Phasellus ullamcorper laoreet enim, nec aliquam turpis scelerisque et. Etiam dictum metus in elit aliquam dapibus. Vivamus vel lectus velit. Nam sed purus luctus, commodo dui quis, malesuada dui. Nulla porttitor aliquet elit sit amet viverra. Proin tempor nulla urna, non aliquet metus maximus quis. Aliquam ac lectus nec mi aliquam sagittis. Quisque venenatis quam eget nisl tempor, egestas rutrum eros eleifend. Nullam venenatis commodo velit, non tempor mauris fermentum ut. In a metus quis erat cursus sagittis. Donec congue nisl in viverra egestas. + +Vestibulum facilisis ligula magna, eu ornare lectus varius et. Mauris facilisis faucibus quam, quis mollis eros convallis non. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent sit amet rutrum erat. Suspendisse potenti. Donec lorem mi, sagittis a fringilla sit amet, sagittis bibendum mauris. In in diam et lorem rutrum eleifend a et felis. Sed ac magna quis enim faucibus dictum. Suspendisse blandit enim eu ex laoreet gravida. + +Suspendisse sed semper felis. Etiam mattis magna mi, suscipit ullamcorper tellus euismod sed. Aenean congue scelerisque ligula id sodales. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc sem lectus, gravida ac dui non, pharetra posuere leo. Maecenas lacus libero, facilisis et elit vitae, commodo facilisis sem. Vivamus id nisl nulla. Integer at maximus dui. Ut a tincidunt lorem. Vivamus vitae ligula vel lacus cursus condimentum. Phasellus quis mauris lobortis, finibus lorem in, vulputate ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus aliquam metus, quis varius elit porttitor id. Vivamus dignissim sollicitudin scelerisque. Morbi tincidunt, dolor quis vehicula consequat, dui diam condimentum nunc, vitae scelerisque odio libero nec ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; diff --git a/dms/test/vector.svg b/dms/test/vector.svg new file mode 100644 index 00000000..11413434 --- /dev/null +++ b/dms/test/vector.svg @@ -0,0 +1 @@ +<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_llXK6vhsfjTbW54SAQzuHm194MDf7H3y"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_llXK6vhsfjTbW54SAQzuHm194MDf7H3y)"><defs><mask id="_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9"><path d="M -21.25 10 L 271.25 10 L 271.25 240 L -21.25 240 L -21.25 10 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask><mask id="_mask_PMOlF2aP8rrfoLDLWXapKxtbGGQnuraN"><path d="M -21.25 10 L 271.25 10 L 271.25 240 L -21.25 240 L -21.25 10 Z" style="stroke:black;fill:white;stroke-miterlimit:10;"/></mask></defs><g mask="url(#_mask_PMOlF2aP8rrfoLDLWXapKxtbGGQnuraN)"><g mask="url(#_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9)"/></g><g mask="url(#_mask_8YF3kr9IOeRmlealccZwRVRUFQgI7lh9)"><image width="3393" height="2668" transform="matrix(0.086,0,0,0.086,-21.25,10)" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADUEAAApsCAYAAABaIc3kAAAgAElEQVR4XuzbMREAAAwCseLfdG38kCrgQld2jgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmGBhbOJRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTOC8gQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECP7iR6UAACAASURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABKwuN0wAAIABJREFUAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSMoPwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJpASOodD3CESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgBOUHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBICxhBpesRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIyg/QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWsAIKl2PcAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGEH5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE0gJGUOl6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAjKDxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkBYwgkrXIxwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkZQfoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbSAEVS6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDCC8gMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKQFjKDS9QhHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIARlB8gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAtYASVrufZt2MaAAAAhGH+Xc/GjjoghRfhCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAGZf5HAAAgAElEQVRAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDNgiagAACAASURBVECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAt4AS1rkc4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgScoGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG1gBPUuh7hCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBwgrIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWAk5Q63qEI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDACcoGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYCzhBresRjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABJygbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgLeAEta5HOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnKBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtYAT1Loe4QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQcIKyAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE1gJOUOt6hCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwAnKBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWAs4Qa3rEY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAScoGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYC3gBLWuRzgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJygbIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbWAE9S6HuEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHCCsgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNYCTlDreoQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAJygYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgLOEGt6xGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEnKBsgQIAAAQIEYu/uYbSq1v4B36tmBujEUMg/fAQqBgstSGRM/CiIKJzCExEGE4JhjApTMMURRNBiKAbUOERCIgNitBAUQ+FHIphQaHFgKgxKXiyI2AEz1Ouf7TuelyOgM2vPxzPPc+1S9+/ea13roZidfa9FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0toAmqoZfH4AgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ0ATlN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEMLaIJq6OUxOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENEH5DRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0NACmqAaenkMjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABTVB+AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINLSAJqiGXh6DI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAE5TfAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDS2gCaqhl8fgCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDQBOU3QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAQwtogmro5TE4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ0QfkNECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ0AKaoBp6eQyOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAFNUH4DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0tIAmqIZeHoMjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEATlN8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINLaAJqqGXx+AIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENAE5TdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBDC2iCaujlMTgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDRB+Q0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDQApqgGnp5DI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAU1QfgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDS0gCaohl4egyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQBOU3wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0toAmqoZfH4AgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ0ATlN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEMLaIJq6OUxOAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIENEH5DRAgQIAAAQIECBAgQIAAAQIEGkQg5zw3Is5ExKaU0oUGGZZhECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJh2AU1Q074EBkCAAAECBAgQIECAAAECBAgQ+F+BnPOBiHg1IoYiojOldJ0NAQIECBAgQIAAAQIECBAgQIDAxAvknKt3L9VmNC4CBAgQIECAAAECBAgQIECAAIEZIqAJaoYslGESIECAAAECBAgQIECAAAECzS1QfXgTEd/eNsuzKaXqv7kIECBAgAABAgQIECBAgAABAgQmUCDnvDsiXo+IFU7jnkBYpQgQIECAAAECBAgQIECAAAECkyygCWqSgZUnQIAAAQIECBAgQIAAAQIECIxFIOd8JSIe+NO9gymlTWPJu4cAAQIECBAgQIAAAQIECBAgQODvBXLO1buWD0bvHEopdfx9yh0ECBAgQIAAAQIECBAgQIAAAQKNIKAJqhFWwRgIECBAgAABAgQIECBAgACBlha4bffhuzm8kFI60tJAJk+AAAECBAgQIECAAAECBAgQmACBnHPV8HQmIubcVm57SunABJRXggABAgQIECBAgAABAgQIECBAYJIFNEFNMrDyBAgQIECAAAECBAgQIECAAIG/Ehj9+Ob83yg9mlKqPtBxESBAgAABAgQIECBAgAABAgQIFAjknOdGRHUS9+0NUFWlGxHRkVKq/p+LAAECBAgQIECAAAECBAgQIECggQU0QTXw4hgaAQIECBAgQIAAAQIECBAg0PwCOecLEbH8b2bqY5zm/ymYIQECBAgQIECAAAECBAgQIDBJAqMNUNUGM/d6B3M2pdQ5SY9XlgABAgQIECBAgAABAgQIECBAYIIENEFNEKQyBAgQIECAAAECBAgQIECAAIHxCuScd0fE62PMDUVEZ0rp+hjvdxsBAgQIECBAgAABAgQIECBAgEBE5JyPRETX32BsTykdAEaAAAECBAgQIECAAAECBAgQINC4ApqgGndtjIwAAQIECBAgQIAAAQIECBBoYoGc84KIqE6BmjOOaX6eUnpmHPe7lQABAgQIECBAgAABAgQIECDQ0gLj2ISmOol7gQ1oWvrnYvIECBAgQIAAAQIECBAgQIBAgwtogmrwBTI8AgQIECBAgAABAgQIECBAoDkFcs5nImJVwezeTiltK8iJECBAgAABAgQIECBAgAABAgRaSiDnvCkiPhjHpG1AMw4stxIgQIAAAQIECBAgQIAAAQIEplpAE9RUi3seWT/BkgAAIABJREFUAQIECBAgQIAAAQIECBAg0PICOeeqiWl/DYgXUkpHauRFCRAgQIAAAQIECBAgQIAAAQJNLZBz7oiIahOa8ZzCXZmsTSl91tQ4JkeAAAECBAgQIECAAAECBAgQmKECmqBm6MIZNgECBAgQIECAAAECBAgQIDAzBXLOCyLiQsEHOH+e8IqUUlXHRYAAAQIECBAgQIAAAQIECBAgcJtAznnu6PuXBwpgbkTEgpTS9YKsCAECBAgQIECAAAECBAgQIECAwCQKaIKaRFylCRAgQIAAAQIECBAgQIAAAQJ/Fsg5VzsJPz0BMtUHOR0ppSsTUEsJAgQIECBAgAABAgQIECBAgEDTCOScq41jlteY0GBKaVONvCgBAgQIECBAgAABAgQIECBAgMAkCGiCmgRUJQkQIECAAAECBAgQIECAAAECdxPIOT8TEScnUGcoIjrtTDyBokoRIECAAAECBAgQIECAAAECM1og53wkIromYBKPppTOTEAdJQgQIECAAAECBAgQIECAAAECBCZIQBPUBEEqQ4AAAQIECBAgQIAAAQIECBD4K4Gc89yIqE5tmjPBUnYmnmBQ5QgQIECAAAECBAgQIECAAIGZKZBz3hYR+ydo9L+MnsJ9fYLqKUOAAAECBAgQIECAAAECBAgQIFBTQBNUTUBxAgQIECBAgAABAgQIECBAgMBYBHLOn0XE02O5t+CeN1JKuwtyIgQIECBAgAABAgQIECBAgACBphCYhBO4K5e3U0pVY5WLAAECBAgQIECAAAECBAgQIECgAQQ0QTXAIhgCAQIECBAgQIAAAQIECBAg0NwCOefOiPh2kmf5QkrpyCQ/Q3kCBAgQIECAAAECBAgQIECAQMMJ5Jw7IuLMJJzAXc310ZRSVdtFgAABAgQIECBAgAABAgQIECAwzQKaoKZ5ATyeAAECBAgQIECAAAECBAgQaG6BnPPciLgQEQ9M8kxvRERnSql6losAAQIECBAgQIAAAQIECBAg0BICU/DuZSilVDVZuQgQIECAAAECBAgQIECAAAECBKZZQBPUNC+AxxMgQIAAAQIECBAgQIAAAQLNLZBzPhARr07RLKtGqAUppetT9DyPIUCAAAECBAgQIECAAAECBAhMq0DOudoQZvkkD+KNlNLuSX6G8gQIECBAgAABAgQIECBAgAABAn8joAnKT4QAAQIECBAgQIAAAQIECBAgMEkCOefOiPh2ksrfq+zQ6IlQGqGmGN7jCBAgQIAAAQIECBAgQIAAgakVyDkfiYiuKXrqCidwT5G0xxAgQIAAAQIECBAgQIAAAQIE7iGgCcpPgwABAgQIECBAgAABAgQIECAwSQI55ysR8cAklf+rsoMppU3T8FyPJECAAAECBAgQIECAAAECBAhMiUDOeVtE7J+Sh/3vQ4ZSSh1T+DyPIkCAAAECBAgQIECAAAECBAgQ+JOAJig/CQIECBAgQIAAAQIECBAgQIDAJAjknHdHxOslpX/86XIsXbywJHp7ZntK6UDdIvIECBAgQIAAAQIECBAgQIAAgUYTmKbTtysG71sa7cdgPAQIECBAgAABAgQIECBAgEBLCWiCaqnlNlkCBAgQIECAAAECBAgQIEBgKgRyztWuwOdLn9W5dn08/ODy6Nu5o7TEH7m1KaXP6haRJ0CAAAECBAgQIECAAAECBAg0isDoe5czETFnGsZ0IyI6UkrV6d8uAgQIECBAgAABAgQIECBAgACBKRbQBDXF4B5HgAABAgQIECBAgAABAgQINL9AzvlCRCwvmem7h4/GO4cHf4++tv2l6Hp2XUmZPzLVhzmdKaVqPC4CBAgQIECAAAECBAgQIECAwIwWyDnPjYiqAarovUs1+R/OD8XFS5frvHM5m1LqnNGQBk+AAAECBAgQIECAAAECBAgQmKECmqBm6MIZNgECBAgQIECAAAECBAgQINCYAjnn3RHxesnofvzpcjy1Yct/RQ/u2xOPPbKypNwfmV9Gdyi+XqeILAECBAgQIECAAAECBAgQIEBgugVyzlUD1KrScVy99lusGX33curYoZg/777SUttTSgdKw3IECBAgQIAAAQIECBAgQIAAAQJlApqgytykCBAgQIAAAQIECBAgQIAAAQJ3COScF0REderSnBKeNRtfjIuXfv6v6Oz2tjg+0B9LFy8sKflHZiil1FGngCwBAgQIECBAgAABAgQIECBAYDoFcs5HIqKrdAzDI7difXfPf969PPzg8vhwoL+0XHX69oKUkk1nSgXlCBAgQIAAAQIECBAgQIAAAQIFApqgCtBECBAgQIAAAQIECBAgQIAAAQJ3E6izG/HgJyfizf3v3RV22ZJFvzdCtbfNqgM/mFLaVKeALAECBAgQIECAAAECBAgQIEBgOgRyztU7jQ/qPLu7d1d8ffbcf5Xo29kb61Y/UVr285TSM6VhOQIECBAgQIAAAQIECBAgQIAAgfELaIIav5kEAQIECBAgQIAAAQIECBAgQOAOgZzztojYX0Jz9dpvsWbDlrg5PHLPeM3dif+ouz2ldKBkjDIECBAgQIAAAQIECBAgQIAAgekQyDl3RsS3dZ791oGBOPLxp3eUqE7gPnPyozobz6xNKX1WZ2yyBAgQIECAAAECBAgQIECAAAECYxfQBDV2K3cSIECAAAECBAgQIECAAAECBO4qkHNeEBEXImJOCdHz3T3x/b+H/ja6bvWT0bdzx9/e9zc3PJpSOlO3iDwBAgQIECBAgAABAgQIECBAYLIFcs4dEVG9xyh651KN78Tpr6J3b989h/r4qpUx0LendCo3ImJBSul6aQE5AgQIECBAgAABAgQIECBAgACBsQtoghq7lTsJECBAgAABAgQIECBAgAABAncVyDlXO/4+XcIz+MmJeHP/e2OO9u3sjXWrnxjz/Xe5sfo4pzOlVDVtuQgQIECAAAECBAgQIECAAAECDSmQc5472gC1vHSAP/50OZ7asOVv4wf37YnHHln5t/fd44bBlNKm0rAcAQIECBAgQIAAAQIECBAgQIDA2AU0QY3dyp0ECBAgQIAAAQIECBAgQIAAgTsEcs7PRMTJEprhkVvRufa5uDk8Mq748YP98dCK4u9/qmdVx05VjVB2KR6XvJsJECBAgAABAgQIECBAgACBqRLIOVcnQK0qfd7Va7/Fmg1bxvTeZXZ7W5w5+VG0t80qfZyTt0vl5AgQIECAAAECBAgQIECAAAEC4xDQBDUOLLcSIECAAAECBAgQIECAAAECBG4XGN2R+EpEzCmR6e7dFV+fPTfuaPVhzvGB/li6eOG4s7cFzqaUOusUkCVAgAABAgQIECBAgAABAgQITIZAzvlARLxaWrvaeGZ9d09cvPTzmEusW/1k9O3cMeb7/3TjLxHRYcOZUj45AgQIECBAgAABAgQIECBAgMDYBDRBjc3JXQQIECBAgAABAgQIECBAgACBOwRyzkcioquE5pvvzsXWHbtKor9nli1Z9HsjVI0diqsygymlTcWDECRAgAABAgQIECBAgAABAgQITLBAzrl6V/FBnbKlG8/UPH377ZTStjrjliVAgAABAgQIECBAgAABAgQIEPhrAU1QfiEECBAgQIAAAQIECBAgQIAAgQKBnHN1itK3BdGodiPuXPtc3BweKYn/J/P4qpUx0LenVo2IeCGlVDVzuQgQIECAAAECBAgQIECAAAEC0yqQc+6IiPN1BvHWgYE48vGnRSXm3z8vvjh2qM6mM4+mlM4UPVyIAAECBAgQIECAAAECBAgQIEDgbwU0Qf0tkRsIECBAgAABAgQIECBAgAABAv8tkHOeGxEXIuKBEpvevfvixOkvS6J3ZDb98x/xr23ddWv5QKeuoDwBAgQIECBAgAABAgQIECBQSyDnvGD0fcuc0kInTn8VvXv7SuO/52q+axlKKVWNXC4CBAgQIECAAAECBAgQIECAAIFJENAENQmoShIgQIAAAQIECBAgQIAAAQLNLZBzPhARr5bM8ofzQ7F+a09J9J6Zvp29sW71E3Vq3oiIjpTSlTpFZAkQIECAAAECBAgQIECAAAECJQKjG85UJygtL8lXmR9/uhzru3tqn7xd1Tp+sD8eWlE8lDdSSrtL5yFHgAABAgQIECBAgAABAgQIECBwbwFNUH4dBAgQIECAAAECBAgQIECAAIFxCOScOyPi23FE/nPr8MiteGrDlrj667WS+F9mvjh2KJYuXlin7lBEdKaUrtcpIkuAAAECBAgQIECAAAECBAgQGK9AzvmziHh6vLk/7q/euXSufW5CGqCqmsuWLIpTR98vHU6VW5FSqk4RdxEgQIAAAQIECBAgQIAAAQIECEyggCaoCcRUigABAgQIECBAgAABAgQIEGh+gZxz9QFL0VbAbx0YiCMffzopSLPb2+LUsUMxf959dep/nlJ6pk4BWQIECBAgQIAAAQIECBAgQIDAeATqnLhdPadqgKpOgLp46efxPPZv731lc1e8vHnj3953jxuGUkodpWE5AgQIECBAgAABAgQIECBAgACBuwtogvLLIECAAAECBAgQIECAAAECBAiMUSDnvDsiXh/j7f912w/nh2L91p6S6Jgz1S7Fxwf6o71t1pgzd7nx7ZTStjoFZAkQIECAAAECBAgQIECAAAECYxHIOW+KiA/Gcu+97unduy9OnP6yTol7ZmuevL09pXRgUgamKAECBAgQIECAAAECBAgQIECgRQU0QbXowps2AQIECBAgQIAAAQIECBAgMD6BnHO1e+/58aX+7+41G1+c8B2J7zaWx1etjIG+PaXD/CP3QkrpSN0i8gQIECBAgAABAgQIECBAgACBewnUfddS1X338NF45/DgpCFXG86cOvp+af0bEdGRUrpSWkCOAAECBAgQIECAAAECBAgQIEDgvwU0QflFECBAgAABAgQIECBAgAABAgTGIJBzvhARy8dw6x23TPYHOX9+4Cubu+LlzRtLhnp7ZkVKqZqziwABAgQIECBAgAABAgQIECAwoQI55wURUb13mFNa+MTpr6J3b19pfMy517a/FF3Prhvz/X+68WxKqbM0LEeAAAECBAgQIECAAAECBAgQIPDfApqg/CIIECBAgAABAgQIECBAgAABAn8jkHPeFhH7S6B+/OlyPLVhS0m0VqZvZ2+sW/1EnRp2K66jJ0uAAAECBAgQIECAAAECBAjcVSDnPDcizpRuNlMVrd63rO/uiZvDI5OuPLu9LU4dOxTz591X+qztKaUDpWE5AgQIECBAgAABAgQIECBAgACB/xPQBOXXQIAAAQIECBAgQIAAAQIECBD4C4G6OxOv2fhiXLz085QbVx/oHB/oj6WLF9Z59lBEdKaUrtcpIkuAAAECBAgQIECAAAECBAgQ+EMg5/xZRDxdKjI8cis61z43JQ1Qf4zx4QeXx4cD/aVDrjaaWeD9SimfHAECBAgQIECAAAECBAgQIEDg/wQ0Qfk1ECBAgAABAgQIECBAgAABAgT+QiDnXO1MvKoEafCTE/Hm/vdKohOSqRqhzpz8KNrbZtWpN5hS2lSngCwBAgQIECBAgAABAgQIECBAoBLIOe+OiNdLNaoGqOoEqOnYcOa17S9F17PrSof+eUrpmdKwHAECBAgQIECAAAECBAgQIECAwP8KaILySyBAgAABAgQIECBAgAABAgQI3EMg57wtIvaXAF299lus2bBlSnclvts4ly1Z9PuJUDUbod5IKVUfKbkIECBAgAABAgQIECBAgAABAkUCOedqk5UPisKjod69++LE6S/rlCjOTsBmM2tTStUpWC4CBAgQIECAAAECBAgQIECAAIFCAU1QhXBiBAgQIECAAAECBAgQIECAQHML5JznRsSViJhTMtPnu3vi+38PlUQnPLNu9ZPRt3NH3bovpJSO1C0iT4AAAQIECBAgQIAAAQIECLSeQM65IyKq07aL3rNUYtN94nY1hsdXrYyBvj2lC3gjIhaklK6XFpAjQIAAAQIECBAgQIAAAQIECLS6gCaoVv8FmD8BAgQIECBAgAABAgQIECBwV4Gcc7Uz79MlPI3wUc6fx/3K5q54efPGkun8kak+1OlMKV2oU0SWAAECBAgQIECAAAECBAgQaC2BuhvNVFrffHcutu7Y1RBwB/fticceWVk6lsGUUnUilosAAQIECBAgQIAAAQIECBAgQKBAQBNUAZoIAQIECBAgQIAAAQIECBAg0NwCOednIuJkySyHR25F59rn4ubwSEl8UjM1P9KpxmbH4kldIcUJECBAgAABAgQIECBAgEBzCYw2QFUnQC0vndmPP12O9d09DfOuZXZ7W5w5+VG0t80qndKjKaXKxEWAAAECBAgQIECAAAECBAgQIDBOAU1Q4wRzOwECBAgQIECAAAECBAgQINDcAnV3J+7u3RVfnz3XkEjVRzrHB/pj6eKFdcY3NHoi1PU6RWQJECBAgAABAgQIECBAgACB5hfIOR+JiK7SmVabzTy1YUtc/fVaaYlJya1b/WT07dxRWvuXiOhIKXm3UiooR4AAAQIECBAgQIAAAQIECLSsgCaoll16EydAgAABAgQIECBAgAABAgTuJlDn45xvvjsXW3fsamjY+ffPiy+OHaqzW3E1v8GU0qaGnqjBESBAgAABAgQIECBAgAABAtMqkHPeHRGv1xnEmo0vxsVLP9cpMWnZ4wf746EVxQdcvZ1S2jZpg1OYAAECBAgQIECAAAECBAgQINCkApqgmnRhTYsAAQIECBAgQIAAAQIECBAYv0DOuTMivh1/MqLambhz7XNxc3ikJD6lmWVLFsWpo+/Xfeb2lNKBukXkCRAgQIAAAQIECBAgQIAAgeYTyDlXm6d8UGdmvXv3xYnTX9YpManZCdho5tGU0plJHaTiBAgQIECAAAECBAgQIECAAIEmE9AE1WQLajoECBAgQIAAAQIECBAgQIBAmUDOeW5EXIiIB0oqNPqHOX+e07rVT0bfzh0lU709szal9FndIvIECBAgQIAAAQIECBAgQIBA8wjknDsiomrumVM6q8FPTsSb+98rjU9ZbtM//xH/2tZd+rxfUkoLSsNyBAgQIECAAAECBAgQIECAAIFWFNAE1Yqrbs4ECBAgQIAAAQIECBAgQIDAHQI55+pUo1dLaH44PxTrt/aURKc189r2l6Lr2XV1xnAjIjpTSlXzmIsAAQIECBAgQIAAAQIECBBocYHRTWau1GmA+ua7c7F1x64ZI3n8YH88tGJ56XjfSCntLg3LESBAgAABAgQIECBAgAABAgRaTUATVKutuPkSIECAAAECBAgQIECAAAECdwjknDsj4tsSmuGRW/HUhi1x9ddrJfFpzxzctycee2RlnXH8EhEdKaXrdYrIEiBAgAABAgQIECBAgAABAjNfIOdcbZRS3BH040+XY313T9wcHpkxGMuWLIpTR9+vM94VNpipwydLgAABAgQIECBAgAABAgQItJKAJqhWWm1zJUCAAAECBAgQIECAAAECBO4qUOcDnbcODMSRjz+dsbKz29vi+EB/LF28sM4chlJKHXUKyBIgQIAAAQIECBAgQIAAAQIzWyDnfCQiukpnMZM3mnllc1e8vHlj6dS9VymVkyNAgAABAgQIECBAgAABAgRaTkATVMstuQkTIECAAAECBAgQIECAAAECtwvknHdHxOslKtXuxNUpUDP9qnYsrhqh2ttm1ZnKYEppU50CsgQIECBAgAABAgQIECBAgMDMFMg5b4uI/XVG/3x3T3z/76E6JaY1+8WxQ3U2mXkjpVS9o3IRIECAAAECBAgQIECAAAECBAj8hYAmKD8PAgQIECBAgAABAgQIECBAoGUFcs7V6UXnSwHWbHwxLl76uTTeULmHH1weHw701x3T9pTSgbpF5AkQIECAAAECBAgQIECAAIGZI5BzfiYiTtYZce/efXHi9Jd1Skx7ttpk5tTR90vHcSMiOlJKV0oLyBEgQIAAAQIECBAgQIAAAQIEWkFAE1QrrLI5EiBAgAABAgQIECBAgAABAncVyDlfiIjlJTzvHj4a7xweLIk2bGbd6iejb+eOuuN7NKV0pm4ReQIECBAgQIAAAQIECBAgQKDxBUY3mKneA8wpHe2J019F796+0nhD5V7b/lJ0PbuudExnU0qdpWE5AgQIECBAgAABAgQIECBAgEArCGiCaoVVNkcCBAgQIECAAAECBAgQIEDgDoGc87aI2F9C8+NPl+OpDVtKog2f6dvZG+tWP1FnnNXOxZ0pparBzEWAAAECBAgQIECAAAECBAg0qUDOeW5EVH//P1A6xR/OD8X6rT2l8YbLzW5vi1PHDsX8efeVjs0p26VycgQIECBAgAABAgQIECBAgEBLCGiCaollNkkCBAgQIECAAAECBAgQIEDgdoGc84LRj3SKdil+vrsnvv/3UNOiHj/YHw+tKDog6w+TCqdqhLretEgmRoAAAQIECBAgQIAAAQIEWlygzgnbFV21ycz67p64OTzSVJIPP7g8PhzoL51TtblMR0rpSmkBOQIECBAgQIAAAQIECBAgQIBAMwtogmrm1TU3AgQIECBAgAABAgQIECBA4K4COeczEbGqhGfwkxPx5v73SqIzJlPtWnx8oD+WLl5YZ8xnU0qddQrIEiBAgAABAgQIECBAgAABAo0pkHM+EhFdpaMbHrn1ewPUxUs/l5Zo6Nxr21+KrmfXlY7x85TSM6VhOQIECBAgQIAAAQIECBAgQIBAMwtogmrm1TU3AgQIECBAgAABAgQIECBA4A6BnPOmiPighObqtd9izYYtTbdD8d0sli1Z9HsjVHvbrBKqPzKDKaXK20WAAAECBAgQIECAAAECBAg0iUDOeVtE7K8znWY/ZbvaYObMyY/qvFdZm1L6rI6xLAECBAgQIECAAAECBAgQIECgGQU0QTXjqpoTAQIECBAgQIAAAQIECBAgcFeBnPPciLgSEXNKiJr9A50/mzy+amUM9O0pobo980JKqdod2kWAAAECBAgQIECAAAECBAjMcIGcc3VC0ck60+jduy9OnP6yTokZka35XuVGRCxIKV2fEZM1SAIECBAgQIAAAQIECBAgQIDAFAlogpoiaI8hQIAAAQIECBAgQIAAAQIEpl8g51ztoPt0yUhOnP4qevf2lURndGbTP/8R/9rWXXcOj6aUztQtIk+AAAECBAgQIECAAAECBAhMn0DOuSMiqr/vizaXqUbeau9XDu7bE489srJ00T5PKVVNZy4CBAgQIECAAAECBAgQIECAAIFRAU1QfgoECBAgQIAAAQIECBAgQIBASwjU2al4eORWdK59Lm4Oj7SE1Z8n2bezN9atfqLO3KvdiztSStUpXC4CBAgQIECAAAECBAgQIEBghgmMnq5dNUAtLx36D+eHYv3WntL4jMzNbm+LMyc/iva2WaXjt7FMqZwcAQIECBAgQIAAAQIECBAg0JQCmqCacllNigABAgQIECBAgAABAgQIELhdYPRDnaoBp2in4u7eXfH12XMtjfrFsUOxdPHCOgZDEdGZUrpep4gsAQIECBAgQIAAAQIECBAgMPUCOeeqAWpV6ZOvXvst1mzY0pIbzKxb/WT07dxRSvfL6MYy3qeUCsoRIECAAAECBAgQIECAAAECTSWgCaqpltNkCBAgQIAAAQIECBAgQIAAgbsJ5JwPRMSrJTrffHcutu7YVRJtqky1c/GpY4di/rz76szr85TSM3UKyBIgQIAAAQIECBAgQIAAAQJTK5BzPhIRXaVPrU7YXt/dExcv/VxaYsbnjh/sj4dWFB+i9XZKaduMRzABAgQIECBAgAABAgQIECBAgMAECGiCmgBEJQgQIECAAAECBAgQIECAAIHGFcg5d0bEtyUjrD7S6Vz7XEvuUnw3r2VLFsXxgf5ob5tVwvlHxoc7dfRkCRAgQIAAAQIECBAgQIDAFArknDdFxAd1HumE7Yj598+L6pTtGu9UHk0pVadxuQgQIECAAAECBAgQIECAAAECLS2gCaqll9/kCRAgQIAAAQIECBAgQIBAcwvknOdGxIWIeKBkpm8dGIgjH39aEm3azOOrVsZA356683shpVTtIu0iQIAA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wydLgAABAgQIECBAgAABAgQINKKAJqhGXBVjIkCAAAECBAgQIECAAAECBO4qkHOuGl+KtsB99/DReOfwINkGEKi5k3E1g6HRRqjrDTAdQyBAgAABAgQIECBAgAABAg0nMNoAVZ0AVfQepZrQjz9djvXdPXFzeKTh5tcqA3plc1e8vHlj6XSHUkrVSWAuAgQIECBAgAABAgQIECBAgEDTCGiCapqlNBECBAgQIECAAAECBAgQINDcAjnn3RHxesksq492qlOgXI0hMLu9LY4P9MfSxQvrDOhsSqmzTgFZAgQIECBAgAABAgQIECDQrAI55yMR0VU6Pydql8pNfO6LY4fqvEN5I6VUvVNzESBAgAABAgQIECBAgAABAgSaQkATVFMso0kQIECAAAECBAgQIECAAIHmFsg5L4iI/ymd5ZqNL8bFSz+XxuUmQWDZkkW/N0K1t82qU30wpbSpTgFZAgQIECBAgAABAgQIECDQbAJ1NpL5w8K7lMb5VVTvUE4dfb90QDcioiOldKW0gBwBAgQIECBAgAABAgQIECBAoJEENEE10moYCwECBAgQIECAAAECBAgQIHBXgZzzmYhYVcLz7uGj8c7hwZKozCQLPL5qZQz07an7lBdSStXu1i4CBAgQIECAAAECBAgQINDyAjnnarOQD+pA9O7dFydOf1mnhOwEC7yyuSte3ryxtKrTtEvl5AgQIECAAAECBAgQIECAAIGGE9AE1XBLYkAECBAgQIAAAQIECBAgQIDA7QI5520Rsb9E5eq136LzmedKojJTJLDpn/+If23rrvu0R1NKVaOciwABAgQIECBAgAABAgQItKxAzrkjIqq/j+eUIgx+ciLe3P9eaVxukgRmt7fFqWOHYv68+0qfsD2ldKA0LEeAAAECBAgQIECAAAECBAgQaBQBTVCNshLGQYAAAQIECBAgQIAAAQIECNwhkHNeEBEXSj/eeb67J77/9xDZBhfo29kb61Y/UWeUNyKiI6V0pU4RWQIECBAgQIAAAQIECBAgMFMFcs5zI6L6u7i4Aeqb787F1h27ZipB04/74QeXx4cD/aXz9O6kVE6OAAECBAgQIECAAAECBAgQaCgBTVANtRwGQ4AAAQIECBAgQIAAAQIECNwukHOudi9eVaJi5+IStenLfHHsUCxdvLDOAKput86U0vU6RWQJECBAgAABAgQI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bbbxQR2N3r374sTpL+uUkG1hgeMH++OhFctLBd5IKVXv/FwECBAgQIAAAQIECBAgQIAAgWkR0AQ1LeweSoAAAQIECBAgQIAAAQIEmlsg59wREedLZ9m5dn1c/fVaaVyOwH8Eau5w/EedR1NKZ7ASIECAAAECBAgQIECAAIE6AnXfl1TPfvfw0Xjn8GCdYci2uMD8++fFmZPH6yisSCldqFNAlgABAgQIECBAgAABAgQIECBQKqAJqlROjgABAgQIECBAgAABAgQIELinQM65+hCiaEtZH/P4YU20QN/O3li3+ok6ZW9ERKcPfOoQyhIgQIAAAQIECBAgQKC1BXLOCyKiel8yp1TixOmvondvX2lcjsB/BF7Z3BUvb95YKjKUUqo2QHIRIECAAAECBAgQIECAAAECBKZcQBPUlJN7IAECBAgQIECAAAECBAgQaG6BnPPuiHi9ZJY//nQ5ntqwpSQqQ+AvBb44diiWLl5YR2lotBHqep0isgQIECBAgAABAgQIECDQegI557kRUZ0wXLRhTCVWvTNZ390TN4dHWg/QjCdFoOa7kjdSStU7QBcBAgQIECBAgAABAgQIECBAYEoFNEFNKbeHESBAgAABAgQIECBAgACB5haou6vxmo0vxsVLPzc3ktlNi8Ds9rY4dexQzJ93X53nf55SeqZOAVkCBAgQIECAAAECBAgQaD2BnPNnEfF06cyHR25F59rnNECVAsrdVWDZkkVx6uj7dXT+X0rpSp0CsgQIECBAgAABAgQIECBAgACB8QpoghqvmPsJECBAgAABAgQIECBAgACBewrknKtdjVeVEL17+Gi8c3iwJCpDYEwC1cc9xwf6o71t1pjuv8dNb6eUttUpIEuAAAECBAgQIECAAAECrSNQ58TsSqlqgKpOgLJpTOv8ZqZypq9s7oqXN28sfeTZlFJnaViOAAECBAgQIECAAAECBAgQIFAioAmqRE2GAAECBAgQIECAAAECBAgQuEMg51w1huwvobl67bdYs2GLHY1L8GTGJfD4qpUx0LdnXJm73PxCSulI3SLyBAgQIECAAAECBAgQINDcAjnnTRHxQZ1Z9u7dFydOf1mnhCyBvxQ489lHdU7O3p5SOoCYAAECBAgQIECAAAECBAgQIDBVApqgpkracwgQIECAAAECBAgQIECAQBML5JwXRMSFiJhTMs3nu3vi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tPnekaFYua6nJCpDgMAUEei86454qLur7mgWp5SqYkoXAQIECBAgQIAAAQIEpqRAznlZROyvM7jezVti38HX6zQhS4DAJAls2/J43PSrG0p7dxJ2qZwcAQIECBAgQIAAAQIECBCY4gKKoKb4AzI8AgQIECBAgAABAgQIECDwbYGc86KIOFKiMjxyNm5dtTZOfHayJC5DgMAUEujb2Bsrlt5cZ0TVrsiLUkrH6zQiS4AAAQIECBAgQIAAgUYIjL7/OBQRs0rb33fwjejd3FcalyNAYJIFZra3xaH9L0R724zSkdyYUqp+jrgIECBAgAABAgQIECBAgACBJhJQBNVED9NUCBAgQIAAAQIECBAgQKD5BXLO1cktC0tm+uTAYOx88eWSqAwBAlNMoFoItHewPxZcdUWdkQ1FREdK6VSdRmQJECBAgAABAgQIECAwngI559kRUb3/mFfarpOwS+XkCEwtgZqnYX86ugGM9x5T67EaDQECBAgQIECAAAECBAgQqCWgCKoWnzABAgQIECBAgAABAgQIEJg4gZzzpoh4tKTHYx99cu4UKBcBAs0jMA47IlcYr6SUljWPipkQIECAAAECBAgQIDDdBXLO1cktS0rnUb0DWdnVE2eGR0qbkCNAYAoJ7N3WH9ctLtoTqprFUyml7ik0HUMhQIAAAQIECBAgQIAAAQIEagoogqoJKE6AAAECBAgQIECAAAECBCZCIOe8KCKOlPZ12+r74+iHH5fG5QgQmKIC11x95bkTodrbZtQZ4WMpparI0kWAAAECBAgQIECAAIFJFcg574yINaWDGB45e64AyjuQUkE5AlNPYO7lc+K1PdvrvPtYnFKqTpdzESBAgAABAgQIECBAgAABAk0goAiqCR6iKRAgQIAAAQIECBAgQIBA8wvU2QX5mR274+kdu5ofyQwJtKjAiqW3RN/GDXVnf29KqVps6CJAgAABAgQIECBAgMCkCOScOyPiuTqdd/U+Er8//E6dJmQJEJiCAp133REPdXeVjmwopVRtMOUiQIAAAQIECBAgQIAAAQIEmkBAEVQTPERTIECAAAECBAgQIECAAIHmFsg5d0fE1pJZHvvok7h11dqSqAwBAtNI4Lf3rYnf3Le6zohPR0SHnZHrEMoSIECAgVckAgAAIABJREFUAAECBAgQIFAqkHPuiIi3SvNV7smBwdj54st1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Dw4EEEAAAQQQQAABBBBAAAEEAhdgCCpwYhZAAAEEEEAAAQQQQAABBApbwFpbLcndNOZpp4IH123Qm2+5B3FzIIAAAgggULwC9ddfq93btypWVekHYZsxxu0exBExgdSN2+1ed9VMt91tXUNqPTKo/mGbbkikz5va+45qjuxS+d/cg8k5ECgMgeS823Tma/drtGpmYTR0hS7m10xW4taYllxdGmSvZyUluGk3SOLgc6c+l3A7e3m+c7vnveNauW4DD2gJ/nKxAgIIIIBASAVmXzVLbqdqH59L3GiMORbS9igLAQQQQAABBBBAAAEEEECggAQYgiqgi0krCCCAAAIIIIAAAggggEA+BKy1eyXd42Xt115/Q2sffcxLKDEIIIAAAggUnMA3lyzW9rYn/Pb1kDHGDdNwREAgddO2e1r2+iDL7fxwVPGDSR3ruxDkMqHJXTpwWjVHd6nyg6OhqYlCEMimwFhphfrrl6q//lsaK6vIZupQ5mqumzI+DDW9LNCvNd20ZNwY4/6+5YiYgJ/PJVyryYFBNd77AANQEbvulIsAAgggkH2BHzzcpO8/vNpr4i5jzHyvwcQhgAACCCCAAAIIIIAAAgggkK5AoN8WpFsE5yGAAAIIIIAAAggggAACCERTwFq7XNILXqrnJiMvasQggAACCBS6QPN37tMP4+v8tsnTl/0K5iDeWut27XIDUJ5200ynxJPJi4ofGtDePw2nc3rkzykZGVJ1928044/PR74XGkAgHYELlTU603C/zs1bks7pkT6nutwo3lChxxf62jExHYNOSc3GGLfbMUcEBKy1CT/DxO6zCbcDVPe770egW0pEAAEEEEAgeAG3G1TddfO8LrSJHTa90hGHAAIIIIAAAggggAACCCCQrgBDUOlKcR4CCCCAAAIIIIAAAggggMBnBFI7FxyTNMcLzbqWx/Tbzje8hBKDAAIIIIBAQQu0bWzRimV3+OnxrKT53MDthzC4WGttoyR3w3ZDUKucHbFKdA2N/+sftkEtE6q80453qubILpWMDoWqLopBIBcC52vr1begScMzPP1plosSs7bG3Ngktd8+TUuuLs1azssk2uT+X22M6Q96IfJ7F7DWNkt62nsGqWXzFu3Z94qfFMQigAACCCBQUAL111+rl3b9wk9PX+HzCD98xCKAAAIIIIAAAggggAACCEwkwBDUREL8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hKAqQLclAQIECBAgQIAAAQIECJQmEMNB28fuCHFCUvza1TyBGPSKU5/muqdMfWre8amYAAECBAgQIECAAAECQxUQghoqb4sWz/66e/D7H2tRw1olQIAAAQIECAwsIAQ1MJ0HCRAgQIAAgZQE1m+Z+loWwmdT6qkpvQhBNeWk1EmAAAECBAgQIECAAAECyxWIQag4HWps/chyl/L8kAXeuHCxN+Eq/okhKBcBAgQIECBAgAABAgQIEHg3ASEo70UhAtmKbd3ZZ2cKWcsiBAgQIECAAIHEBYSgEj9g7REgQIAAAQL9CWycmBy9lK842d/d7ipSQAiqSE1rESBAgAABAgQIECBAgEATBOJEqBiIihOiTIeq14kdPXX6rfBTvSpTDQECBAgQIECAAAECBAjUUUAIqo6n0rCa8vBc99D0ZMOqVi4BAgQIECBAoDIBIajK6G1MgAABAgQI1E1gw8S23XmePVS3ulKvRwgq9RPWHwECBAgQIECAAAECBAi8n8Bdt9361nSoG1ZeD6sCgTPnzof9hxd64af4tYsAAQIECBAgQIAAAQIECPQrIATVr5T73ksgz7MHThz6/ncIESBAgAABAgQI9CcgBNWfk7sIECBAgACBFgiYBlXNIQtBVeNuVwIECBAgQIAAAQIECBCol0AMQI131vSmQ61dvapexSVazfyJxV7waa67mGiH2iJAgAABAgQIECBAgACBYQsIQQ1bOPn1X+4enB5NvksNEiBAgAABAgQKFBCCKhDTUgQIECBAgEDzBTpbfuE7IeQfbX4nzelACKo5Z6VSAgQIECBAgAABAgQIEChHIIag7t20rvfHdKhizeOkp73zx3rhpzcuXCx2casRIECAAAECBAgQIECAQOsEhKBad+SFNpxl4VPHZ6d3F7qoxQgQIECAAAECiQsIQSV+wNojQIAAAQIElibQmbh/MuSX9y3tKXcvR0AIajl6niVAgAABAgQIECBAgACB1AWuhqE2rlmdeqtD6y+GneLUpz1zL4VXTp8d2j4WJkCAAAECBAgQIECAAIH2CQhBte/MC+zYFKgCMS1FgAABAgQItEdACKo9Z61TAgQIECBAoE+BzuapmZCF+/q83W3LFBCCWiagxwkQIECAAAECBAgQIECgFQK33HTjm9OhRkP82nVtgRh4ilOf5rqnTH26Npc7CBAgQIAAAQIECBAg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QIAAAQIECCxBYMPE1M48D08u4RG3XkNACMorQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNFBCCauKplVazKVClUduIAAECBAgQaJOAEFSbTluvBAgQIECAQCECpkEVwvjWIkJQxXpajQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKERCCKse5ibtkWf7U8dl9O5tYu5oJECBAgAABAnUWEIKq8+mojQABAgQIEKilQGfL1CMhhD+uZXENLEoIqoGHpmQCBAgQIECAAAECBAgQIECAAAECBAgQIEDg/2fv/mLzus87wT+HpkxbtizaY8OZNIiohsrKyYWYLGLxIoUoxrsuMBd2ZwFjgUxheoF2F92LagrsFvC0sIwpAnQvtsrNAm2BNb1B9yJYtHKBAeqBQ1FIsKCUTUJdNNZETEQZk04CGw0V/xMt+j2LQ8uS3le0xJfv+f9+CPjC9jnP7/l9ntPCVfXVQ4AAAQIECIQQlI/gkwRGk87+80uLq4QIECBAgAABAgTyFRCCytdTNQIECBAgQGAIBCamZsZHx0ayX6jaOwTXLfyKQlCFEzuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoQEIIqALUFJW2BasEQXYEAAQIECBCorYAQVG1HozECBAgQIECgzgKT07PHI40X6txjU3oTgmrKpPRJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjcLCEH5HrYSSDqdL134/uIyHQIECBAgQIAAgfwFhKDyN1WRAAECBAgQGAIB26DyG7IQVH6WKhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAeQJCUOVZN+akNE6vnF2YaUy/GiVAgAABAgQINExACKphA9MuAQIECBAgUB+BA9NH59M0ebY+HTWzEyGoZs5N1wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBh2ASGoYf8Ctrh/MnJ0Zem1RTIECBAgQIAAAQLFCAhBFeOqKgECBAgQIDAEAgenZyY20pGLQ3DVQq8oBFUor+IECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJCAEFRBsM0te27lzMJUc9vXOQECBAgQIECg/gJCUPWfkQ4JECBAgACBGgvYBjX4cISgBjdUgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFxCCKt+8zicmSTx3YWlhvs496o0AAQIECBAg0HQBIaimT1D/BAgQIECAQKUCB74yM5WOjPyo0iYafrgQVMMHqH0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMqYAQ1JAOfutrX1o5szBBhAABAgQIECBAoFgBIahifVUnQIAAAQIEhkBg8vHZxUjiyBBctZArCkEVwqooAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQsIARVMHCDytsC1aBhaZUAAQIECBBotIAQVKPHp3kCBAgQIECgDgKT00/MRNo5VYdemtiDEFQTp6ZnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBCC8g1cE7i8sd6ZWF1eXCNCgAABAgQIECBQrIAQVLG+qhMgQIAAAQJDIjB5eHY5Ig4NyXVzvaYQVK6cihEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASQJCUCVB1/2YJF5cWVo4Xvc29UeAAAECBAgQaIOAEFQbpugOBAgQIECAQOUCB6Zn59I0Xqq8kQY2IATVwKFpmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRCCMpHEBG2QPkMCBAgQIAAAQIlCghBlYjtKAIECBAgQKDdApOHZ1cjYl+7b5n/7YSg8jdVkQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKFxCCKt647iekEd/86ZmFY3XvU38ECBAgQIAAgbYICEG1ZZLuQYAAAQIECFQuYBvUzkYgBLUzN28RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQLUCQlDV+tfh9NGks//80mL2h+b6IUCAAAECBAgQKEFACKoEZEcQIECAAAECwyMweXh2LSL2Ds+NB7+pENTghioQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQPkCQlDlm9fpxCRJX76wdGquTj3phQABAgQIECDQdgEhqLZP2P0IECBAgACBUgUmp2ePRxovlHpoww8Tgmr4ALVPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBIRUQghrSwV+7ti1Qwz1/tydAgAABAgSqERCCqsbdqQQIECBAgEBLBSamZsZHx0ayNee2QW1zxkJQ24TyGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUSkAIqlbjKLeZNE6vnF2YKfdQpxEgQIAAAQIECAhB+QYIECBAgAABAjkLfO7w7Ikk4g9zLtvackJQrR2tixEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDpL1CqAAAgAElEQVQgQKDVAkJQrR7v7S+XjBxdWXptcYgFXJ0AAQIECBAgUImAEFQl7A4lQIAAAQIE2ixwcHpmYiMdudjmO+Z5NyGoPDXVIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyBISgypKu2Tm2QNVsINohQIAAAQIEhklACGqYpu2uBAgQIECAQGkCB6aPzqdp8mxpBzb4ICGoBg9P6wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhiASGo4Rx+ksRzF5YW5ofz9m5NgAABAgQIEKhWQAiqWn+nEyBAgAABAi0VsA1q+4MVgtq+lScJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoD4CQlD1mUWJnVxaObMwUeJ5jiJAgAABAgQIELhJQAjK50CAAAECBAgQKEhg8vHZxUjiSEHlW1NWCKo1o3QRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJWAENRQjXvzsrZADd/M3ZgAAQIECBCol4AQVL3moRsCBAgQIECgRQKT00/MRNo51aIrFXIVIahCWBUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYIFhKAKBq5f+csrZxbG69eWjggQIECAAAECwyMgBDU8s3ZTAgQIECBAoAIB26DujC4EdWcjTxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA/QSEoOo3k0I7SuLFlaWF44WeoTgBAgQIECBAgMBtBYSgfCAECBAgQIAAgQIFDkzPzqVpvFTgEY0vLQTV+BG6AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIZSQAhqqMZ+eWO9M7G6vLg2VLd2WQIECBAgQIBAzQSEoGo2EO0QIECAAAEC7ROYPDy7GhH72nezfG4kBJWPoyoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUK6AEFS53pWeZgtUpfwOJ0CAAAECBAh8LCAE5VsgQIAAAQIECBQsYBvU7YGFoAr+AJUnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIEhKAKYa1l0dGks//80mL2h+D6IUCAAAECBAgQqFBACKpCfEcTIECAAAECwyNgG9Qnz1oIanj+58BNCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0CYBIag2TfOT75Ik6csXlk7NDcdt3ZIAAQIECBAgUG8BIah6z0d3BAgQIECAQEsEJqdnj0caL7TkOrleQwgqV07FCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAkASGokqArPsYWqIoH4HgCBAgQIECAwE0CQlA+BwIECBAgQIBACQITUzPjo2Mj2Vr0vSUc16gjhKAaNS7NEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMA1ASGoYfgUkldWznzn6WG4qTsSIECAAAECBJogIATVhCnpkQABAgQIEGiFgG1QW49RCKoVn7dLECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYOgEhKCGYOTJyNGVpdcWh+CmrkiAAAECBAgQaISAEFQjxqRJAgQIECBAoA0CB6dnJjbSkYttuEuedxCCylNTLQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoS0AIqizpis5J4/TK2YWZik53LAECBAgQIECAwBYCQlA+CwIECBAgQIBAiQIHpo/Op2nybIlH1v4oIajaj0iDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCFgBBUuz+LNE1+56dnv3Oy3bd0OwIECBAgQIBAswSEoJo1L90SIECAAAECDRewDerWAQpBNfyj1j4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSGVEAIqtWDv7RyZmGi1Td0OQIECBAgQIBAAwWEoBo4NC0TIECAAAECzRaYPPy1kxHpU82+RX7dC0HlZ6kSAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQnIARVnnXZJyVJPHdhaWG+7HOdR4AAAQIECBAgcHsBIShfCAECBAgQIECgZIHJ6SdmIu2cKvnY2h4nBFXb0WiMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBG4jIATV2s/DFqjWjtbFCBAgQIAAgaYLCEE1fYL6J0CAAAECBBopMPn47GIkcaSRzefctBBUzqDKESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEApAkJQpTBXcci/XTmzcKKKg51JgAABAgQIECBwewEhKF8IAQIECBAgQKACAdugbqALQVXwATqSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYWEIIamLCOBS5vrHcmVpcX1+rYnJ4IECBAgAABAsMuIAQ17F+A+xMgQIAAAQKVCUwenl2NiH2VNVCTg4WgajIIbRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXwJCUH1xNePhJF5cWVo43oxmdUmAAAECBAgQGD4BIajhm7kbEyBAgAABAjURODA9O5em8VJN2qmsDSGoyugdTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIDCAhBDYBX01c31jsP2gJV0+FoiwABAgQIECAQEUJQPgMCBAgQIECAQIUCtkFFCEFV+AE6mgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgR2LCAEtWO6Wr6YJOnLF5ZOzdWyOU0RIECAAAECBAhsCghB+RAIECBAgAABAhUKTB6ePRYRf1FhC5UfLQRV+Qg0QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI7EBCC2gFajV8ZTTr7zy8trta4Ra0RIECAAAECBIZeQAhq6D8BAAQIECBAgECVAhNTM+OjYyPZL6DtrbKPKs8WgqpS39kECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFMBIaidytXvPVug6jcTHREgQIAAAQIEthIQgvJdECBAgAABAgQqFpicnj0eabxQcRuVHS8EVRm9gwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgAAEhqAHw6vZqMnJ0Zem1xbq1pR8CBAgQIECAAIFuASEoXwQBAgQIECBAoGKBa9ugflVxG5UdLwRVGb2DCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAAASGoAfDq9Goap1fOLszUqSW9ECBAgAABAgQIbC0gBOXLIECAAAECBAjUQODA9NH5NE2erUErpbcgBFU6uQMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIAcBIagcEOtQwhaoOkxBDwQIECBAgACBbQkIQW2LyUMECBAgQIAAgWIFDk7PTGykIxeLPaWe1YWg6jkXXREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA7QWEoFrxhVxaObMw0YqbuAQBAgQIECBAYAgEhKCGYMiuSIAAAQIECDRDYFi3QQlBNeP71CUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdAsIQTX/i0iSeO7C0sJ882/iBgQIECBAgACB4RAQghqOObslAQIECBAg0ACByeknZiLtnGpAq7m2KASVK6diBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFCSgBBUSdDFHWMLVHG2KhMgQIAAAQIEChEQgiqEVVECBAgQIECAwM4EJh+fXYwkjuzs7Wa+JQTVzLnpmgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsMuIATV7C/AFqhmz0/3BAgQIECAwHAKCEEN59zdmgABAgQIEKipwDBugxKCqunHqC0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQuK2AEFSjP5DLG+udidXlxbVG30LzBAgQIECAAIEhExCCGrKBuy4BAgQIECBQf4HJw7PLEXGo/p3m06EQVD6OqhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAuQJCUOV653paEi+uLC0cz7WmYgQIECBAgAABAoULCEEVTuwAAgQIECBAgEB/AgemZ+fSNF7q763mPi0E1dzZ6ZwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLDLCAE1djp2wLV2NFpnAABAgQIEBh2ASGoYf8C3J8AAQIECBCopcDk4dnViNhXy+ZybkoIKmdQ5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgFAEhqFKYcz8kSdKXLyydmsu9sIIECBAgQIAAAQKFCwhBFU7sAAIECBAgQIBA/wLDtA1KCKr/78MbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFC9gBBU9TPYSQejSWf/+aXF7A+n9UOAAAECBAgQINAwASGohg1MuwQIECBAgMBwCExMzYyPjo1kv+C2t+03FoJq+4TdjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0UEIJq3lxtgWrezHRMgAABAgQIELhZQAjK90CAAAECBAgQqKnA5PTs8UjjhZq2l1tbQlC5USpEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAiUKCEGViJ3TUUmn86UL319czqmcMgQIECBAgAABAiULCEGVDO44AgQIECBAgMB2BYZlG5QQ1Ha/CM8RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJ0EhKDqNI1t9JLG6ZWzCzPbeNIjBAgQIECAAAECNRUQgqrpYLRFgAABAgQIEMgEDkwfnU/T5Nk2awhBtXm67kaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH2CghBNWy2ycjRlaXXFhvWtXYJECBAgAABAgRuEhCC8jkQIECAAAECBGoscHB6ZmIjHblY4xYHbk0IamBCBQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgAgEhqArQd3qkLVA7lfMeAQIECBAgQKBWAkJQtRqHZggQIECAAAECtwq0fRuUEJSvngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCAE1ZypJUk8d2FpYb45HeuUAAECBAgQIEBgKwEhKN8FAQIECBAgQKDmAge+MjOVjoz8qOZt7rg9Iagd03mRAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCoUEIKqEL+/oy+tnFmY6O8VTxMgQIAAAQIECNRRQAiqjlPREwECBAgQIECgR2Dy8dnFSOJIG2GEoNo4VXciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+wWEoJoxY1ugmjEnXRIgQIAAAQIEtiMgBLUdJc8QIECAAAECBCoWmJx+YibSzqmK2yjkeCGoQlgVJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGCBYSgCgbOp/zllTML4/mUUoUAAQIECBAgQKBqASGoqifgfAIECBAgQIDANgXaug1KCGqbH4DHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBWAkJQtRrH1s0k8eLK0sLxBnSqRQIECBAgQIAAgW0ICEFtA8kjBAgQIECAAIE6CByYnp1L03ipDr3k2YMQVJ6aahEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAWQJCUGVJ7/icyxvrnYnV5cW1HVfwIgECBAgQIECAQK0EhKBqNQ7NECBAgAABAgRuLzB5eHY1Iva1yUkIqk3TdBcCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMj4AQVL1nnUZ886dnFo7Vu0vdESBAgAABAgQI9CMgBNWPlmcJECBAgAABAhULtHEblBBUxR+V4wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgRwJCUDtiK+2l0aSz//zSYvaHzfohQIAAAQIECBBoiYAQVEsG6RoECBAgQIDA8AhMHp7N1rTvbcuNhaDaMkn3IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwHAJCEHVd95Jkr58YenUXH071BkBAgQIECBAgMBOBISgdqLmHQIECBAgQIBAhQKT07PHI40XKmwh16OFoHLlVIwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEShIQgioJegfH2AK1AzSvECBAgAABAgQaICAE1YAhaZEAAQIECBAgcLPAxNTM+OjYSLauvRXboISgfN8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0EQBIaiaTi2N0ytnF2Zq2p22CBAgQIAAAQIEBhAQghoAz6sECBAgQIAAgaoEPnd49kQS8YdVnZ/nuUJQeWqqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJlCQhBlSXd5znJyNGVpdcW+3zL4wQIECBAgAABAg0QEIJqwJC0SIAAAQIECBDoFTg4PTOxkY5cbIOMEFQbpugOBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGD4BIagaztwWqBoORUsECBAgQIAAgfwEhKDys1SJAAECBAgQIFCqwIHpo/Npmjxb6qEFHCYEVQCqkgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQuIAQVOHEfR+Qpsnv/PTsd072/aIXCBAgQIAAAQIEGiEgBNWIMWmSAAECBAgQIHCrQFu2QQlB+boJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCQlC1m9qllTMLE7XrSkMECBAgQIAAAQK5CQhB5UapEAECBAgQIECgfIHJw187GZE+Vf7J+Z0oBJWfpUoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJ6AEFR51ts5KUniuQtLC/PbedYzBAgQIECAAAECzRQQgmrm3HRNgAABAgQIENgUmJx+YibSzqkmcwhBNXl6eidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDwCghB1Wr2tkDVahyaIUCAAAECBAgUIyAEVYyrqgQIECBAgACB0gQmH59djCSOlHZgzgcJQeUMqhwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCIgBFUK8/YOSeLFlaWF49t72FMECBAgQIAAAQJNFRCCaurk9E2AAAECBAgQuCbwuce/9nSSpH/XVBAhqKZOTt8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYbgEhqNrM//LGemdidXlxrTYdaYQAAQIECBAgQKAQASGoQlgVJUCAAAECBAiUKzB5eHY1IvaVe2o+pwlB5eOoCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUKyAEVa73J55mC1RNBqENAgQIECBAgEDxAkJQxRs7gQABAgQIECBQuMCB6dm5NI2XCj+ogAOEoApAVZIAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEChcQgiqceFsHjCad/eeXFrM/PNYPAQIECBAgQIBAywWEoFo+YNcjQIAAAQIEhkegqdughKCG5xt1UwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRJQAiq+mkmSfryhaVTc9V3ogMCBAgQIECAAIEyBISgylB2BgECBAgQIECgBIHJ6dnjkcYLJRyV6xFCULlyKkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECJQkIQZUEfZtjbIGqfgY6IECAAAECBAiUKSAEVaa2swgQIECAAAECBQpMTM2Mj46NZOvd9xZ4TO6lhaByJ1WQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoQEIIqAfk2R9gCVa2/0wkQIECAAAECVQgIQVWh7kwCBAgQIECAQEECTdwGJQRV0MegLAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUKiAEVSjvnYsnI0dXll5bvPODniBAgAABAgQIEGiLgBBUWybpHgQIECBAgACBiDg4PTOxkY5cbBKGEFSTpqVXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhYQAiqwm8hjdMrZxdmKuzA0QQIECBAgAABAhUICEFVgO5IAgQIECBAgECRAgemj86nafJskWfkWVsIKk9NtQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgLAEhqLKktzjHFqgK8R1NgAABAgQIEKhOQAiqOnsnEyBAgAABAgQKEWjaNighqEI+A0UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGABIaiCgT+5/KWVMwsTlZ3uYAIECBAgQIAAgcoEhKAqo3cwAQIECBAgQKA4gSZtgxKCKu47UJkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEihMQgirO9naVkySeu7C0MF/N6U4lQIAAAQIECBCoUkAIqkp9ZxMgQIAAAQIEChKYnH5iJtLOqYLK51pWCCpXTsUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCQBIaiSoLuPsQWqEnaHEiBAgAABAgTqISAEVY856IIAAQIECBAgkLvA5OOzi5HEkdwL51xQCCpnUOUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBQBIahSmHsP+bcrZxZOVHKyQwkQIECAAAECBCoXEIKqfAQaIECAAAECBAgUI9CUbVBCUMXMX1UCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKFZACKpY3y2qX95Y70ysLi+ulX6yAwkQIECAAAECBGohIARVizFoggABAgQIECBQjMDk4dnViNhXTPV8qgpB5eOoCgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUKyAEVa53JPHiytLC8ZJPdRwBAgQIECBAgECNBISgajQMrRAgQIAAAQIE8hY4MD07l6bxUt5186wnBJWnploECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJaAEFRZ0h+ds7HeedAWqHLNnUaAAAECBAgQqJuAEFTdJqIfAgQIECBAgEDOAnXfBiUElfPAlSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBUgSEoEph3jwkSdKXLyydmivvRCcRIECAAAECBAjUUUAIqo5T0RMBAgQIECBAIEeBycOzxyLiL3IsmWspIahcORUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZIEhKBKgo6I0aSz//zS4mp5JzqJAAECBAgQIECgjgJCUHWcip4IECBAgAABAjkKTEzNjI+OjWS/ELg3x7K5lRKCyo1SIQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoUUAIqhxsW6DKcXYKAQIECBAgQKAJAkJQTZiSHgkQIECAAAECAwpMTs8ejzReGLBMIa8LQRXCqigBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCwgBFUw8LXySafzpQvfX1wu5zSnECBAgAABAgQI1FlACKrO09EbAQIECBAgQCAngTpvgxKCymnIyhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAqQJCUCVwp3F65ezCTAknOYIAAQIECBAgQKABAkJQDRiSFgkQIECAAAECeQgcmD46n6bJs3nUyrOGEFSemmoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFkCQlAlSCcjR1eWXlss4SRHECBAgAABAgQINEBACKoBQ9IiAQIECBAgQCAPgYPTMxMb6cjFPGrlWUMIKk9NtQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgLAEhqMKlz62cWZgq/BQHECBAgAABAgQINEZACKoxo9IoAQIECBAgQGBwgTpugxKCGnyuKhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA+QJCUMWaJ0k8d2FpYb7YU1QnQIAAAQIECBBokoAQVJOmpVcCBAgQIECAwIACB74yM5WOjPxowDK5vi4ElSunYgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQkoAQVKHQl1bOLEwUeoLiBAgQIECAAAECjRMQgmrcyDRMgAABAgQIEBhMYPLx2cVI4shgVfJ7WwgqP0uVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA8ASGo4qxtgSrOVmUCBAgQIECAQJMFhKCaPD29EyBAgAABAgR2IDA5/cRMpJ1TO3i1kFeEoAphVZQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEChYQgioM+PLGemdidXlxrbATFCZAgAABAgQIEGikgBBUI8emaQIECBAgQIDAYAKTh2eXI+LQYFXyeVsIKh9HVQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgXAEhqIK8k3hxZWnheEHVlSVAgAABAgQIEGiwgBBUg4endQIECBAgQIDATgUOTM/OpWm8tNP383xPCCpPTbUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoCwBIahCpG2BKoRVUQIECBAgQIBAOwSEoNoxR7cgQIAAAQIECPQtMHl4duYoTfAAACAASURBVDUi9vX9Ys4vCEHlDKocAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQiIASVP3Ma8c2fnlk4ln9lFQkQIECAAAECBNogIATVhim6AwECBAgQIEBgBwJ12QYlBLWD4XmFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCoXEILKfwSjSWf/+aXF7A919UOAAAECBAgQIEDgFgEhKB8FAQIECBAgQGBIBSamZsZHx0ayXzjcWyWBEFSV+s4mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ0KCEHtVG7r95IkffnC0qm5fKuqRoAAAQIECBAg0CYBIag2TdNdCBAgQIAAAQJ9CkxOzx6PNF7o87VcHxeCypVTMQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoSUAIKl9oW6Dy9VSNAAECBAgQINBGASGoNk7VnQgQIECAAAEC2xSowzYoIahtDstjBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFArASGoHMeRxumVswszOVZUigABAgQIECBAoIUCQlAtHKorESBAgAABAgT6Efjc4dkTScQf9vNOns8KQeWpqRYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCUgBJWjdDJydGXptcUcKypFgAABAgQIECDQQgEhqBYO1ZUIECBAgAABAv0IHJyemdhIRy72806ezwpB5ampFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUJSAElZO0LVA5QSpDgAABAgQIEGi/gBBU+2fshgQIECBAgACBOwocmD46n6bJs3d8sIAHhKAKQFWSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoXEILKhzhJ4rkLSwvz+VRThQABAgQIECBAoM0CQlBtnq67ESBAgAABAgS2KVDlNighqG0OyWMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCsBIahcxnFp5czCRC6VFCFAgAABAgQIEGi9gBBU60fsggQIECBAgACB7QlMPj67GEkc2d7T+T0lBJWfpUoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUJ6AENTg1rZADW6oAgECBAgQIEBgmASEoIZp2u5KgAABAgQIELiNwOT0EzORdk6VjSQEVba48wgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgDwEhqIEVL6+cWRgfuIoCBAgQIECAAAECQyMgBDU0o3ZRAgQIECBAgMCdBarYBtWmENSdhT1BgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqJ/Bv/uCP4swPz5XbWBIvriwtHC/3UKcRIECAAAECBAg0WUAIqsnT0zsBAgQIECBAIGeBA9Ozc2kaL+Vc9rblhKDK1HYWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4VaCCENTljfXOxOry4pp5ECBAgAABAgQIENiugBDUdqU8R4AAAQIECBAYEoHJw7OrEbGvrOsKQZUl7RwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILC1QOkhKFugfIoECBAgQIAAAQI7EBCC2gGaVwgQIECAAAECbRYoexuUEFSbvyZ3I0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEmCJQdghpNOvvPLy1mf0irHwIECBAgQIAAAQLbFhCC2jaVBwkQIECAAAECwyNQ5jYoIajh+a7clAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKVBmCCpJ0pcvLJ2aq6eErggQIECAAAECBOosIARV5+nojQABAgQIECBQkcDk9OzxSOOFMo4XgipD2RkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCTBcoMQdkC5UskQIAAAQIECBDYqYAQ1E7lvEeAAAECBAgQaLHAxNTM+OjYSLZ2fm/R1xSCKlpYfQIE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cbYqDyYgALVzPwGondt5s94C6w/ui87du6832bt9KfsX73/qC12XaPr2paomkoWe5h67N458eldVLdx87uVs41NEnEiSZLkODemBAAECBAgQIECAAAECBAgQIECAQNkCQlBlizuPAAECBAgQIECAAAECBAgQIECgcoE0TSciIgtEZX91//HnFXR3+YM05l/PtkNdieW3NirooP1HbrVxqncr1a5334zRd97swrCVqv3fRhNvKAhV3NQEoYqzVXlnAgJQO3PL3hKA2rmdN4sT2Gr7Um84qXf7UtZN74am4jpUOROYeng0jh3aHU//5ljsvbsWv6Xi9LWNT9nmJz8ECBAgQIAAAQIECBAgQIAAAQIEhlqgFr9iN9QTcHkCBAgQIECAAAECBAgQIECAAIFKBdI0nbkWhso2RO2ttJmIOPfWRpw4916cvLgea+tp1e04v0egdyvV5sapW4JTP+5666N33mNJIFcBQahcObuKffPvvxc/WPl5cQeoTGCbAp99ZDyef2Y2do/VYvvINruux2MCUPWYQ9u62Ljv4bh6/yPXr9W5+77INjLd/NO7fWnjvke63mmbSZvuMz6WxNzBeyPb/HTo4dE6XO1SFny6Fn5arUNDeiBAgAABAgQIECBAgAABAgQIECBQBwEhqDpMQQ8ECBAgQIAAAQIECBAgQIAAAQKVC6RpOh4RWRAq2w51pPKGIuLl81c2w1Anf7Zeh3b0kJPAVlup7v1Fd3CqdyvVR+9kvw/SD4EbAoJQxXwN761fjW98eyHeeHOtmANUJbANAQGobSB9wiMCUDu3a/Ob7z/6WNf1ercvbQaaHuoJND36hTaTuNs1gWzb09P7x+LZg/fUxeTla8Gnxbo0pA8CBAgQIECAAAECBAgQIECAAAECdRIQgqrTNPRCgAABAgQIECBAgAABAgQIECBQC4E0TSci4ti1UFT374asoMNLb38Y8+evxPzrV2L17Q8r6MCRdRS495c9wamerVRbha1sparjJAfrSRBqML9PelsQqhhXVbcnIAC1Pafep95+5934+h/8Ubz+k5WdFfBWLQW2s31p/aGJ6Ny9+3r/ti/VcpS1ampiz11x7NC9kQWg9u25qw69nYuIExFxMkkSKew6TEQPBAgQIECAAAECBAgQIECAAAECtRUQgqrtaDRGgAABAgQIECBAgAABAgQIECBQB4E0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u+mU7iYANaUXp+0iBbY+bMXWeiseb9wppb8nEdGrqqpXSkP6IECAAAECBAgQIECAAAECBAgQIECAgBCUd4AAAQIECBAgQIAAAQIECBAgQIAAgWIEUkqPhmGoPCFquenG8l/u3tl/E71X/Tjqp6bbsT+B4gUEoeq9IkGoej1Hqfbnf/wH8Z3fydlcn8sEBKAuE/LPCVwusLa0EJ37dwZTn1aXFi5/YPwr9t+Z+nQ0/u3sQIAAAQIECBAgQIAAAQIECBAgQIAAgasJCEFdzctqAgQIECBAgAABAgQIECBAgAABAgQmIJBSWomIHITK06EeTmDLS7d48uJsEIbqvexfutYCAvMsIAhV7+0LQtXr+XXVBKBGtxaAGt3KSgJfJpBDT537i/Hw/fdKADrOE58iYqeqqr0SGtIDAQIECBAgQIAAAQIECBAgQIAAAQIEvkpACMq7QYAAAQIECBAgQIAAAQIECBAgQIBA0QIppTySY3sYilptutnDk4vovjiL7vOzODi5aLod+xMoUkAQqt5rEYSq1/PLqglAjW4sADW6lZUE3hXIfzZut+/G1oetWL5dxNf0uzn8VFVV100RIECAAAECBAgQIECAAAECBAgQIEBgWgSK+O3qtGDpkwABAgQIECBAgAABAgQIECBAgACBZgVSSnk6VP553Gwnv9792aefRff56WBC1FE/ldCSHggUIyAIVe9V/PxfDuIv/ubv6y2q2kDgo//+3+JPH/0ejREEBKBGQLKEwDsCK60qOhuLsd1ejNWlhRJsDiMih566VVUdlNCQHggQIECAAAECBAgQIECAAAECBAgQIHAVASGoq2hZS4AAAQIECBAgQIAAAQIECBAgQIBAEQIppZWI6Ax/2k03dXyeoveyP5gQ9fST86bbsT+BYgQEoeq9CkGoej1ztT/81nr82Ue/X3/hGawoADWDl+pIYxPI0546G3dic701tj2uWPjJMPj09IrPWU6AAAECBAgQIECAAAECBAgQIECAAIGiBISgiroOzRAgQIAAAQIECBAgQIAAAQIECBAgcFWBlNKDdwJRy1d9vu71hycXsbN/OghFHZxc1F1ePQJTJyAIVe+VCULV5ykANbqlANToVlbOr8Da0sJg4lMOQBUy9Wk/InYioldV1dH83oyTEyBAgAABAgQIECBAgAABAgQIECAwSwJCULN0m85CgAAB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aRh+OiihIT0QIECAAAECBAgQIECAAAECBAgQIECAAIFxCghBjVNXbQIECBAgQIAAAQIECBAgQIAAAQIECBAoRiCltDKcDpUDUQ9LaOzJi7NBGKr3sl9CO3q4goAg1BWw5mipANRsXvbWh63YWm/F4407pRzwSUT0qqrqldKQPggQIECAAAECBAgQIECAAAECBAgQIECAwCQEhKAmoWwPAgQIECBAgAABAgQIECBAgAABAgQIEChKIKW0FhHbw1DUatPNHZ5cRPfFWXSfn8XByUXT7dh/RAFBqBGh5mSZANRsXfTa0kJ07t8ZTH1aXVoo4XD770x9OiqhIT0QIECAAAECBAgQIECAAAECBAgQIECAAIFJCwhBTVrcfgQIECBAgAABAgQIECBAgAABAgQIECBQlEBKaWsYhnpcQmPPPv0sus9PBxOijvqphJb08DUCglBejywgADU770H+d7pzfzEevv9eCYc6fif4tFdCQ3ogQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNCghBNalvbwIECBAgQIAAAQIECBAgQIAAAQIECBAoRiCltDIMQ+UJUe2mG8uhit7L/mBC1NNPzptux/5fIyAINd+vhwDU9N//g3u3Yrt9N7Y+bMXy7SK+Pt2NiF5VVd3p13UCAgQIECBAgAABAgQIECBAgAABAgQIECBQn0ARv8Wv7zgqESBAgAABAgQIECBAgAABAgQIECBAgACBmwuklB5ERGf4s3zzijercHhyETv7p4NQ1MHJxc2KeXosAoJQY2EtvqgAVPFX9JUNrrSq6GwsxnZ7MVaXFko4yOE7U58OSmhIDwQIECBAgAABAgQIECBAgAABAgQIECBAoDQBIajSbkQ/BAgQIECAAAECBAgQIECAAAECBAgQIFCUQEppaxiG2iyhsd1X/S8mRJXQjx7+XUAQar7eBgGo6bzvPO0p/7u6ud4q5QBPcvipqqqnpTSkDwIECBAgQIAAAQIECBAgQIAAAQIECBAgUKqAEFSpN6MvAgQIECBAgAABAgQIECBAgAABAgQIEChKIKW0FhE5ELUdEatNN5cDGN3np9F9cRZ7r9823Y79hwKCUPPxKghATdc9ry0tDCY+5QBUIVOf9iNiJyJ6VVUdTZembgkQIECAAAECBAgQIECAAAECBAgQIECAQHMCQlDN2duZAAECBAgQIECAAAEC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gAABAgQIECBAgAABAgQIECBAgAABAgRmT0AIavbu1IkIECBAgAABAgQIECBAgAABAgQIECBAgEBRAimltWEYKk+IWm26uePzFN3neTrUWey9ftt0O7XsP69BqHkLQD364PZg6tPjjTu1vDc1FHkynPjUq6GWEgQIECBAgAABAgQIECBAgAABAgQIECBAgACBrxUQgvKCECBAgAABAgQIECBAgAABAgQIECBAgAABAhMTSCk9iojPJ0QtT2zjr9ho//Xb2Nl/E71X/Tjqp6bbudH+a0sL0fuT5VImA93oLKM8PC8BqHyvnft3BuGn1aWFUWjGvWY/Irr5p6qqo3Fvpj4BAgQIECBAgAABAgQIECBAgAABAgQIECBA4HMBISjvAgECBAgQIECAAAECBAgQIECAAAECBAgQIDBxgZTSynA6VA5EPZx4A1+yYQ7V5DBU72W/hHau1cNKq4qnW78980GoeQhA5dBT5/5iPHz/vWu9CzU/dJwnPkXETlVVezXXVo4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMJKAENRITBYRIECAAAECBAgQIECAAAECBAgQIECAAAEC4xJIKa1FxPYwFLU6rn1GrXt4chHdF2fRfX4WBycXoz5WzLpZD0LNcgDqwb1bsd2+G1sftmL5dhFf4z0bTnzKk598CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKNChTx7UmjAjYnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEihFIKW0Nw1CPS2jq2aefRff56WBC1FE/ldDSSD3MahBqFgNQ+a46G4uRJz+1790a6X7HvOgwB5+G4aeDMe+lPAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgZAEhqJGpLCRAgAABAgQIECBAgAABAgQIECBAgAABAgQmJZBSWhmGofKEqPak9v2qfY7PU/Re9gcTop5+ct50OyPtP2tBqFkLQOVpT1vrrXi8cWek+5zAoicR0auqqjeBvWxBgAABAgQIECBAgAABAgQIECBAgAABAgQIELiygBDUlck8QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECExSIKX0ICI6w5/lSe79ZXsdnlzEzv7pIBR1cHLRdDtfu/+sBKFmJQC1trQQ2+3FyAGo1aWFEt6d/YjYGYafjkpoSA8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAga8SEILybhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJTI5BS2hqGoTZLaHr3Vf+LCVEl9PNlPUx7EGraA1DZP0986txfjIfvv1fCa3IcEd38U1XVXgkN6YEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMIqAENQoStYQIECAAAECBAgQIECAAAECBAgQIECAAAECRQmklNYiIgeitiNitenmjs9TdJ+fRvfFWey9ftt0O/9p/2kNQk1zAOrBvVux3b47mPq0fLuIr+R2hxOfcgDKhwABAgQIECBAgAABAgQIECBAgAABAgQIECAwdQJFfOMydWoaJkCAAAECBAgQIECAAAECBAgQIECAAAECBIoRSCk9GIahcihquenG9l+/HYShui9O46ifmm7ni/2nLQg1jQGobNzZWIzt9mKsLi2UcPeH70x9OiihIT0QIECAAAECBAgQIECAAAECBAgQIECAAAECBK4rIAR1XTnPESBAgAABAgQIECBAgAABAgQIECBAgAABAsUJpJQ6EZF/HpbQ3O6r/iAQ1XvZL6GdmJYg1LQFoPK0p87Gndhcb5Vwz8d54lMOP1VV9bSEhvRAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhDQAiqDkU1CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaIEUkprwzBUDkStNt3c4cnFIAi1s38aBycXjbZTehBqWgJQa0sLg4lPOQBVyNSn/YjYyQGoqqqOGn3JbE6AAAECBAgQIECAAAECBAgQIECAAAECBAgQGIOAENQYUJUkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEyhFIKT0aBqIel9DV/uu3sbP/Jnqv+nHUT420VGoQqvQAVHbbWm/FdvtutO/dauTu/sOmeepTN4efqqo6KKEhPRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExiUgBDUuWXUJECBAgAABAgQIECBAgAABAgQIECBAgACBogRSSisRsRUR2xHRbrq54/M0mA7VfXEWTz85n3g7pQWhSg5APfrgdnQ27gymPi3fLuLrtd0cfqqqqjfxF8eGBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGGBIr4lqahs9uWAAECBAgQIECAAAECBAgQIECAAAECBAgQmFOBlNLaMAyVQ1GrTTMcnlwMwlDd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BAgQIECAwDwLCEHN8+07OwECBAgQIECAAAECBAgQIECAAAECBAgQIFCkQEqpExH552EJDe6+6g8CUb2X/d9o590g1HUCUGtLC4OJTzkAVcjUp/2I2ImIXlVVRyXY64EAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODXAkJQ3gQCBAgQIECAAAECBAgQIECAAAECBAgQIECAQKECKaW1YRgqB6JWm27z8ORiEITa2T+Ng5OLQTs73/kvsTecGjVKfyutKrbWW9G5vxgP339vlEfGveY4T3zKR6mq6mDcm6lPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwPQEhqOu5eYoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFGBlNKjYSDq8UQ3/orN9l+/jZ39N9F71Y+jfrq0pUcf3I7Oxp3B1Kfl20V8RbWbw09VVfUubd4CAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgWK+IapcQUNECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmRCCltBIRWxGxHRHtpts+Pk+D6VDdF2fx9JPz32hnbWlhEHrabi/G6tJC063m/Q/zxKeI6Jn6VMJ16IEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMLqAENToVlYSIECAAAECBAgQIECAAAECBAgQIECAAAECBIoSSCmtDcNQORS12nRzhycXgzDU3uu3g6lPm+utplvK+x/n0NNw6tPTEhrSAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAwNUFhKCubuYJAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAimlHITqRMRmcc0109D+O1Ofjpppwa4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ1CQhB1SWpDgECBAgQIECAAAECBAgQIECAAAECBAgQIECgAIGU0sowDJUDUe0CWppkC4fDqU87VVUdTHJjexEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIxXQAhqvL6qEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQaE0gpPYiI7YjIU6KWG2tk/BvvRkS3qqre+LeyAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBMCQlBNqNuTAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBhgZRSngyVw1CbE956XNvlqU87w/DT0bg2UZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAMASGoMu5BFwQIECBAgAABAgQIECBAgAABAgQIECBAgACBiQiklNaGYag8IWp1IpvWt8lxRORpTztVVe3VV1YlAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB0gWEoEq/If0RIECAAAECBAgQIECAAAECBAgQIECAAAECBMYkkFJ6FBGfT4haHtM2dZR9lic+5QBUVVWmPtUhqgYBAgQIECBAgAABAgQIECBAgAABAgQIECBAYMoEhKCm7MK0S4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoWyCltDKcDpUDUQ/rrn/NeofD4FO3qqqDa9bwGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwIwICEHNyEU6BgECBAgQIECAAAECBAgQIECAAAECBAgQIECgDoGU0lpEbA9DUat11LxijSfDiU+9Kz5nOQECBAgQIECAAAECBAgQIECAAAECBAgQIECAwAwLCEHN8OU6GgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgJgIppa1hGOrxTeqM8Oz+O1OfjkZYbwkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCcCQhBzdmFOy4BAgQIECBAgAABAgQIECBAgAABAgQIECBA4KoCKaWVYRgqT4hqX/X5r1h/nCc+RcROVVV7NdVUhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEYFhKBm9GIdiwABAgQIECBAgAABAgQIECBAgAABAgQIECAwDoGU0oOI6Ax/lq+xx24OP1VV1b3Gsx4hQIAAAQIECBAgQIAAAQIErHJV9AAAIABJREFUCBAgQIAAAQIECBCYUwEhqDm9eMcmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNxUIKW0NQxDbV5S6zAicuipW1XVwU339TwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgMD8CQhBzd+dOzEBAgQIECBAgAABAgQIECBAgAABAgQIECBAoFaBlNJaRORA1HZErL5T/Mkw+PS01g0VI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQmDsBIai5u3IHJkCAAAECBAgQIECAAAECBAgQIECAAAECBAiMTyCl9CAi8k+vqqqj8e2kMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAwDwJCEHN0207KwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEpFBCCmsJL0zIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBeRIQgpqn23ZWAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlMoIAQ1hZemZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLzJCAENU+37awECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEplBACGoKL03LBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOZJQAhqnm7bWQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMoYAQ1BRempYJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzJOAENQ83bazEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhCASGoKbw0LRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYJwEhqHm6bWclQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMIUCQlBTeGlaJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBPAkJQ83TbzkqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgCgWEoKbw0rRMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYJ4EhKDm6badlQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAUCghBTeGlaZkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAPAkIQc3TbTsrAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSkUEIKawkvTMgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIF5EhCCmqfbdlYCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECUyggBDWFl6ZlAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvMkIAQ1T7ftrAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmUEAIagovTcsECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE5klACGqebttZCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPz/7NtBEQAAAAHB/q3luLENWG8ECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHio+qYqAAAgAElEQVQScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4OE4tGMAACAASURBVGgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBJwgnpaW1cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQQEnqOBoIhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4EnCCelpbVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJBASeo4GgiEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHgScIJ6WltXAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkEBJ6jgaCITIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNa+HRQBAAAQEOzfWg5z24D1RoAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAByqmxcAAAIABJREFUAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACW/ZIdAAAIlUlEQVQBAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAScAJqrS2rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOBZygDkcTmQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBJwAmqtLauBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA4FnKAORxOZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEnACaq0tq4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDgWcoA5HE5kAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBASWC9/Dedn3vKBAAAAABJRU5ErkJggg==" style=""/></g></g></svg> diff --git a/dms/test/video.mp4 b/dms/test/video.mp4 new file mode 100644 index 00000000..20733f83 Binary files /dev/null and b/dms/test/video.mp4 differ diff --git a/dms/tests/__init__.py b/dms/tests/__init__.py new file mode 100644 index 00000000..2502c8f4 --- /dev/null +++ b/dms/tests/__init__.py @@ -0,0 +1,7 @@ +from . import test_storage_attachment +from . import test_storage_database +from . import test_directory +from . import test_file_database +from . import test_file +from . import test_benchmark +from . import test_portal diff --git a/dms/tests/common.py b/dms/tests/common.py new file mode 100644 index 00000000..d09a5a8e --- /dev/null +++ b/dms/tests/common.py @@ -0,0 +1,227 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021-2024 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +import base64 +import functools +import logging +import threading +import time +import uuid + +from odoo.tests import Form, new_test_user + +from odoo.addons.base.tests.common import BaseCommon + +_logger = logging.getLogger(__name__) + +# ---------------------------------------------------------- +# Decorators +# ---------------------------------------------------------- + + +def track_function( + max_query_count=None, max_query_time=None, max_time=None, return_tracking=False +): + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + tracking_parameters = [func.__name__] + threading.current_thread().query_time = 0 + threading.current_thread().query_count = 0 + threading.current_thread().perf_t0 = time.time() + result = func(*args, **kwargs) + message = f"{func.__name__}" + if args and hasattr(args[0], "uid"): + message = f" ({args[0].uid})" + if hasattr(threading.current_thread(), "query_count"): + query_count = threading.current_thread().query_count + query_time = threading.current_thread().query_time + perf_t0 = threading.current_thread().perf_t0 + remaining_time = time.time() - perf_t0 - query_time + time_taken = query_time + remaining_time + message += ( + f" - {query_count} Q {query_time:.3f}s" + f"QT {remaining_time:.3f}s OT {time_taken:.3f}s TT" + ) + + tracking_parameters += [ + query_count, + query_time, + remaining_time, + time_taken, + ] + if max_query_count and query_count > max_query_count: + raise AssertionError(f"More than {max_query_count} queries") + if max_query_time and query_time > max_query_time: + raise AssertionError( + f"Queries took longer than {max_query_time:.3f}s" + ) + if max_time and time_taken > max_time: + raise AssertionError("Function took longer than {max_time:.3f}s") + if not return_tracking: + _logger.info(message) + if return_tracking: + return result, tracking_parameters + return result + + return wrapper + + return decorator + + +# ---------------------------------------------------------- +# Test Cases +# ---------------------------------------------------------- + + +class DocumentsBaseCase(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + # models + cls.access_group_model = cls.env["dms.access.group"] + cls.storage_model = cls.env["dms.storage"] + cls.directory_model = cls.env["dms.directory"] + cls.file_model = cls.env["dms.file"] + cls.category_model = cls.env["dms.category"] + cls.tag_model = cls.env["dms.tag"] + cls.attachment_model = cls.env["ir.attachment"] + cls.partner_model = cls.env["res.partner"] + # users + cls.user = new_test_user(cls.env, login="basic-user") + cls.public_user = cls.env.ref("base.public_user") + cls.dms_user = new_test_user( + cls.env, login="dms-user", groups="dms.group_dms_user" + ) + cls.dms_manager_user = new_test_user( + cls.env, login="dms-manager", groups="dms.group_dms_manager" + ) + cls.access_group = cls.access_group_model.create( + { + "name": "Test", + "perm_create": True, + "perm_write": True, + "perm_unlink": True, + "explicit_user_ids": [ + (6, 0, [cls.dms_user.id, cls.dms_manager_user.id]) + ], + } + ) + + @classmethod + def content_base64(cls): + return base64.b64encode(b"\xff data") + + @classmethod + def create_storage(cls, save_type="database"): + return cls.storage_model.create( + {"name": "Test Storage", "save_type": save_type} + ) + + @classmethod + def create_directory(cls, storage=False, directory=False, model_id=False): + record = Form(cls.directory_model) + record.name = uuid.uuid4().hex + record.is_root_directory = True + if model_id and storage.save_type == "attachment": + # set storage_id_save_type to attachment, making model visible + record.storage_id = storage + record.model_id = model_id + if directory: + record.is_root_directory = False + record.parent_id = directory + else: + record.storage_id = storage + if not storage.inherit_access_from_parent_record: + record.group_ids.add(cls.access_group) + return record.save() + + @classmethod + def create_file(cls, directory=False, content=False): + record = Form(cls.file_model) + record.name = uuid.uuid4().hex + record.directory_id = directory + record.content = content or cls.content_base64() + return record.save() + + @classmethod + def create_attachment(cls, name, res_model=False, res_id=False, content=False): + return cls.attachment_model.create( + { + "name": name, + "res_model": res_model, + "res_id": res_id, + "datas": content or cls.content_base64(), + } + ) + + +class StorageAttachmentBaseCase(DocumentsBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.storage = cls.create_storage(save_type="attachment") + cls.storage.write( + { + "inherit_access_from_parent_record": True, + "include_message_attachments": True, + "model_ids": [(6, 0, [cls.env.ref("base.model_res_partner").id])], + } + ) + cls.partner_model_id = cls.env.ref("base.model_res_partner") + cls.create_directory(storage=cls.storage, model_id=cls.partner_model_id) + cls.partner = cls.partner_model.create({"name": "test partner"}) + cls.other_partner = cls.partner_model.create({"name": "other partner"}) + cls.model_partner = cls.env.ref("base.model_res_partner") + + @classmethod + def _create_attachment(cls, name, partner=None): + """ + Create an attachment for the partner model. + If no partner is provided, the default partner is used. + + :param str name: The name of the attachment. + :param odoo.model.res_partner partner: The partner to attach the document to. + + :return: The created attachment. + :rtype: odoo.model.ir.attachment + """ + if not partner: + partner = cls.partner + return cls.create_attachment( + name=name, + res_model=cls.partner_model._name, + res_id=partner.id, + ) + + @classmethod + def _get_partner_directory(cls, partner=False): + if not partner: + partner = cls.partner + return cls.directory_model.search( + [ + ("storage_id", "=", cls.storage.id), + ("res_model", "=", cls.partner_model._name), + ("res_id", "=", partner.id), + ] + ) + + +class StorageDatabaseBaseCase(DocumentsBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.storage = cls.create_storage(save_type="database") + cls.directory = cls.create_directory(storage=cls.storage) + cls.file = cls.create_file(directory=cls.directory) + + +class StorageFileBaseCase(DocumentsBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.storage = cls.create_storage(save_type="file") + cls.directory = cls.create_directory(storage=cls.storage) + cls.file = cls.create_file(directory=cls.directory) diff --git a/dms/tests/data/dms.category.csv b/dms/tests/data/dms.category.csv new file mode 100644 index 00000000..eeba3423 --- /dev/null +++ b/dms/tests/data/dms.category.csv @@ -0,0 +1,51 @@ +id,name,parent_id/id +dms.category_001_benchmark,C_001, +dms.category_002_benchmark,C_002,dms.category_001_benchmark +dms.category_003_benchmark,C_003,dms.category_002_benchmark +dms.category_004_benchmark,C_004,dms.category_001_benchmark +dms.category_005_benchmark,C_005,dms.category_002_benchmark +dms.category_006_benchmark,C_006,dms.category_003_benchmark +dms.category_007_benchmark,C_007,dms.category_005_benchmark +dms.category_008_benchmark,C_008,dms.category_002_benchmark +dms.category_009_benchmark,C_009,dms.category_006_benchmark +dms.category_010_benchmark,C_010, +dms.category_011_benchmark,C_011,dms.category_001_benchmark +dms.category_012_benchmark,C_012,dms.category_007_benchmark +dms.category_013_benchmark,C_013,dms.category_009_benchmark +dms.category_014_benchmark,C_014,dms.category_013_benchmark +dms.category_015_benchmark,C_015,dms.category_005_benchmark +dms.category_016_benchmark,C_016, +dms.category_017_benchmark,C_017, +dms.category_018_benchmark,C_018, +dms.category_019_benchmark,C_019,dms.category_002_benchmark +dms.category_020_benchmark,C_020,dms.category_013_benchmark +dms.category_021_benchmark,C_021,dms.category_008_benchmark +dms.category_022_benchmark,C_022, +dms.category_023_benchmark,C_023,dms.category_021_benchmark +dms.category_024_benchmark,C_024, +dms.category_025_benchmark,C_025, +dms.category_026_benchmark,C_026,dms.category_016_benchmark +dms.category_027_benchmark,C_027,dms.category_015_benchmark +dms.category_028_benchmark,C_028, +dms.category_029_benchmark,C_029,dms.category_010_benchmark +dms.category_030_benchmark,C_030,dms.category_021_benchmark +dms.category_031_benchmark,C_031,dms.category_003_benchmark +dms.category_032_benchmark,C_032,dms.category_017_benchmark +dms.category_033_benchmark,C_033,dms.category_030_benchmark +dms.category_034_benchmark,C_034, +dms.category_035_benchmark,C_035, +dms.category_036_benchmark,C_036, +dms.category_037_benchmark,C_037,dms.category_011_benchmark +dms.category_038_benchmark,C_038,dms.category_010_benchmark +dms.category_039_benchmark,C_039,dms.category_013_benchmark +dms.category_040_benchmark,C_040, +dms.category_041_benchmark,C_041,dms.category_034_benchmark +dms.category_042_benchmark,C_042,dms.category_023_benchmark +dms.category_043_benchmark,C_043,dms.category_015_benchmark +dms.category_044_benchmark,C_044,dms.category_041_benchmark +dms.category_045_benchmark,C_045,dms.category_039_benchmark +dms.category_046_benchmark,C_046,dms.category_021_benchmark +dms.category_047_benchmark,C_047, +dms.category_048_benchmark,C_048, +dms.category_049_benchmark,C_049,dms.category_042_benchmark +dms.category_050_benchmark,C_050,dms.category_034_benchmark diff --git a/dms/tests/data/dms.directory.csv b/dms/tests/data/dms.directory.csv new file mode 100644 index 00000000..abf95411 --- /dev/null +++ b/dms/tests/data/dms.directory.csv @@ -0,0 +1,501 @@ +id,name,parent_id/id,storage_id/id,is_root_directory,category_id/id,tag_ids/id +dms.directory_001_benchmark,D_0001,,dms.storage_001_benchmark,TRUE,dms.category_041_benchmark,dms.tag_042_benchmark +dms.directory_002_benchmark,D_0002,,dms.storage_002_benchmark,TRUE,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_003_benchmark,D_0003,,dms.storage_001_benchmark,TRUE,dms.category_017_benchmark,dms.tag_017_benchmark +dms.directory_004_benchmark,D_0004,,dms.storage_002_benchmark,TRUE,dms.category_005_benchmark,dms.tag_058_benchmark +dms.directory_005_benchmark,D_0005,,dms.storage_001_benchmark,TRUE,dms.category_019_benchmark,dms.tag_081_benchmark +dms.directory_006_benchmark,D_0006,,dms.storage_002_benchmark,TRUE,,dms.tag_127_benchmark +dms.directory_007_benchmark,D_0007,,dms.storage_001_benchmark,TRUE,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_008_benchmark,D_0008,,dms.storage_002_benchmark,TRUE,dms.category_039_benchmark,dms.tag_146_benchmark +dms.directory_009_benchmark,D_0009,dms.directory_008_benchmark,,,dms.category_014_benchmark,dms.tag_149_benchmark +dms.directory_010_benchmark,D_0010,dms.directory_003_benchmark,,,dms.category_033_benchmark,dms.tag_039_benchmark +dms.directory_011_benchmark,D_0011,dms.directory_007_benchmark,,,,dms.tag_130_benchmark +dms.directory_012_benchmark,D_0012,dms.directory_009_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_013_benchmark,D_0013,dms.directory_010_benchmark,,,dms.category_021_benchmark,dms.tag_136_benchmark +dms.directory_014_benchmark,D_0014,dms.directory_013_benchmark,,,dms.category_022_benchmark,dms.tag_073_benchmark +dms.directory_015_benchmark,D_0015,dms.directory_008_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_016_benchmark,D_0016,dms.directory_010_benchmark,,,dms.category_014_benchmark,dms.tag_149_benchmark +dms.directory_017_benchmark,D_0017,dms.directory_010_benchmark,,,dms.category_023_benchmark,dms.tag_085_benchmark +dms.directory_018_benchmark,D_0018,dms.directory_010_benchmark,,,dms.category_035_benchmark,dms.tag_101_benchmark +dms.directory_019_benchmark,D_0019,dms.directory_011_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_020_benchmark,D_0020,dms.directory_010_benchmark,,,dms.category_033_benchmark,dms.tag_113_benchmark +dms.directory_021_benchmark,D_0021,dms.directory_003_benchmark,,,dms.category_049_benchmark,dms.tag_007_benchmark +dms.directory_022_benchmark,D_0022,dms.directory_009_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_023_benchmark,D_0023,dms.directory_016_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_024_benchmark,D_0024,dms.directory_016_benchmark,,,dms.category_027_benchmark,dms.tag_001_benchmark +dms.directory_025_benchmark,D_0025,dms.directory_014_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_026_benchmark,D_0026,dms.directory_014_benchmark,,,dms.category_024_benchmark,dms.tag_049_benchmark +dms.directory_027_benchmark,D_0027,dms.directory_008_benchmark,,,,dms.tag_127_benchmark +dms.directory_028_benchmark,D_0028,dms.directory_018_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_029_benchmark,D_0029,dms.directory_019_benchmark,,,dms.category_014_benchmark,dms.tag_078_benchmark +dms.directory_030_benchmark,D_0030,dms.directory_001_benchmark,,,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_031_benchmark,D_0031,dms.directory_008_benchmark,,,dms.category_040_benchmark,dms.tag_072_benchmark +dms.directory_032_benchmark,D_0032,dms.directory_023_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_033_benchmark,D_0033,dms.directory_004_benchmark,,,dms.category_015_benchmark,dms.tag_089_benchmark +dms.directory_034_benchmark,D_0034,dms.directory_031_benchmark,,,dms.category_018_benchmark,dms.tag_018_benchmark +dms.directory_035_benchmark,D_0035,dms.directory_014_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_036_benchmark,D_0036,dms.directory_016_benchmark,,,,dms.tag_070_benchmark +dms.directory_037_benchmark,D_0037,dms.directory_029_benchmark,,,dms.category_018_benchmark,dms.tag_133_benchmark +dms.directory_038_benchmark,D_0038,dms.directory_036_benchmark,,,dms.category_043_benchmark,dms.tag_138_benchmark +dms.directory_039_benchmark,D_0039,dms.directory_030_benchmark,,,dms.category_049_benchmark,dms.tag_035_benchmark +dms.directory_040_benchmark,D_0040,dms.directory_008_benchmark,,,,dms.tag_123_benchmark +dms.directory_041_benchmark,D_0041,dms.directory_004_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_042_benchmark,D_0042,dms.directory_012_benchmark,,,, +dms.directory_043_benchmark,D_0043,dms.directory_001_benchmark,,,,dms.tag_108_benchmark +dms.directory_044_benchmark,D_0044,dms.directory_012_benchmark,,,dms.category_027_benchmark,dms.tag_001_benchmark +dms.directory_045_benchmark,D_0045,dms.directory_013_benchmark,,,dms.category_016_benchmark,dms.tag_100_benchmark +dms.directory_046_benchmark,D_0046,dms.directory_043_benchmark,,,,dms.tag_013_benchmark +dms.directory_047_benchmark,D_0047,dms.directory_003_benchmark,,,dms.category_034_benchmark,dms.tag_033_benchmark +dms.directory_048_benchmark,D_0048,dms.directory_018_benchmark,,,dms.category_040_benchmark,dms.tag_043_benchmark +dms.directory_049_benchmark,D_0049,dms.directory_023_benchmark,,,, +dms.directory_050_benchmark,D_0050,dms.directory_033_benchmark,,,dms.category_001_benchmark,dms.tag_122_benchmark +dms.directory_051_benchmark,D_0051,dms.directory_004_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_052_benchmark,D_0052,dms.directory_034_benchmark,,,,dms.tag_046_benchmark +dms.directory_053_benchmark,D_0053,dms.directory_037_benchmark,,,dms.category_001_benchmark,dms.tag_143_benchmark +dms.directory_054_benchmark,D_0054,dms.directory_049_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_055_benchmark,D_0055,dms.directory_028_benchmark,,,dms.category_019_benchmark,dms.tag_055_benchmark +dms.directory_056_benchmark,D_0056,dms.directory_032_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_057_benchmark,D_0057,dms.directory_025_benchmark,,,,dms.tag_127_benchmark +dms.directory_058_benchmark,D_0058,dms.directory_054_benchmark,,,dms.category_049_benchmark,dms.tag_007_benchmark +dms.directory_059_benchmark,D_0059,dms.directory_019_benchmark,,,dms.category_040_benchmark,dms.tag_043_benchmark +dms.directory_060_benchmark,D_0060,dms.directory_059_benchmark,,,,dms.tag_037_benchmark +dms.directory_061_benchmark,D_0061,dms.directory_025_benchmark,,,,dms.tag_046_benchmark +dms.directory_062_benchmark,D_0062,dms.directory_052_benchmark,,,dms.category_046_benchmark,dms.tag_022_benchmark +dms.directory_063_benchmark,D_0063,dms.directory_017_benchmark,,,dms.category_019_benchmark,dms.tag_081_benchmark +dms.directory_064_benchmark,D_0064,dms.directory_057_benchmark,,,,dms.tag_123_benchmark +dms.directory_065_benchmark,D_0065,dms.directory_002_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_066_benchmark,D_0066,dms.directory_008_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_067_benchmark,D_0067,dms.directory_026_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_068_benchmark,D_0068,dms.directory_016_benchmark,,,dms.category_050_benchmark,dms.tag_110_benchmark +dms.directory_069_benchmark,D_0069,dms.directory_061_benchmark,,,dms.category_011_benchmark,dms.tag_144_benchmark +dms.directory_070_benchmark,D_0070,dms.directory_018_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_071_benchmark,D_0071,dms.directory_036_benchmark,,,,dms.tag_091_benchmark +dms.directory_072_benchmark,D_0072,dms.directory_046_benchmark,,,dms.category_043_benchmark,dms.tag_139_benchmark +dms.directory_073_benchmark,D_0073,dms.directory_013_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_074_benchmark,D_0074,dms.directory_038_benchmark,,,,dms.tag_044_benchmark +dms.directory_075_benchmark,D_0075,dms.directory_023_benchmark,,,dms.category_028_benchmark,dms.tag_052_benchmark +dms.directory_076_benchmark,D_0076,dms.directory_037_benchmark,,,dms.category_033_benchmark,dms.tag_113_benchmark +dms.directory_077_benchmark,D_0077,dms.directory_058_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_078_benchmark,D_0078,dms.directory_034_benchmark,,,dms.category_011_benchmark,dms.tag_080_benchmark +dms.directory_079_benchmark,D_0079,dms.directory_034_benchmark,,,dms.category_018_benchmark,dms.tag_083_benchmark +dms.directory_080_benchmark,D_0080,dms.directory_037_benchmark,,,dms.category_006_benchmark,dms.tag_041_benchmark +dms.directory_081_benchmark,D_0081,dms.directory_050_benchmark,,,,dms.tag_091_benchmark +dms.directory_082_benchmark,D_0082,dms.directory_042_benchmark,,,dms.category_041_benchmark,dms.tag_087_benchmark +dms.directory_083_benchmark,D_0083,dms.directory_038_benchmark,,,,dms.tag_134_benchmark +dms.directory_084_benchmark,D_0084,dms.directory_067_benchmark,,,,dms.tag_119_benchmark +dms.directory_085_benchmark,D_0085,dms.directory_041_benchmark,,,dms.category_050_benchmark,dms.tag_050_benchmark +dms.directory_086_benchmark,D_0086,dms.directory_001_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_087_benchmark,D_0087,dms.directory_083_benchmark,,,dms.category_040_benchmark,dms.tag_043_benchmark +dms.directory_088_benchmark,D_0088,dms.directory_036_benchmark,,,dms.category_005_benchmark,dms.tag_058_benchmark +dms.directory_089_benchmark,D_0089,dms.directory_044_benchmark,,,,dms.tag_010_benchmark +dms.directory_090_benchmark,D_0090,dms.directory_040_benchmark,,,,dms.tag_119_benchmark +dms.directory_091_benchmark,D_0091,dms.directory_011_benchmark,,,dms.category_003_benchmark,dms.tag_145_benchmark +dms.directory_092_benchmark,D_0092,dms.directory_045_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_093_benchmark,D_0093,dms.directory_007_benchmark,,,dms.category_033_benchmark,dms.tag_113_benchmark +dms.directory_094_benchmark,D_0094,dms.directory_003_benchmark,,,dms.category_041_benchmark,dms.tag_042_benchmark +dms.directory_095_benchmark,D_0095,dms.directory_085_benchmark,,,,dms.tag_004_benchmark +dms.directory_096_benchmark,D_0096,dms.directory_023_benchmark,,,dms.category_014_benchmark,dms.tag_059_benchmark +dms.directory_097_benchmark,D_0097,dms.directory_007_benchmark,,,, +dms.directory_098_benchmark,D_0098,dms.directory_070_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_099_benchmark,D_0099,dms.directory_053_benchmark,,,,dms.tag_127_benchmark +dms.directory_100_benchmark,D_0100,dms.directory_092_benchmark,,,dms.category_017_benchmark,dms.tag_017_benchmark +dms.directory_101_benchmark,D_0101,dms.directory_037_benchmark,,,dms.category_011_benchmark,dms.tag_021_benchmark +dms.directory_102_benchmark,D_0102,dms.directory_063_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_103_benchmark,D_0103,dms.directory_067_benchmark,,,dms.category_044_benchmark,dms.tag_095_benchmark +dms.directory_104_benchmark,D_0104,dms.directory_018_benchmark,,,dms.category_041_benchmark,dms.tag_036_benchmark +dms.directory_105_benchmark,D_0105,dms.directory_056_benchmark,,,,dms.tag_034_benchmark +dms.directory_106_benchmark,D_0106,dms.directory_085_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_107_benchmark,D_0107,dms.directory_053_benchmark,,,dms.category_022_benchmark,dms.tag_073_benchmark +dms.directory_108_benchmark,D_0108,dms.directory_027_benchmark,,,,dms.tag_013_benchmark +dms.directory_109_benchmark,D_0109,dms.directory_045_benchmark,,,dms.category_009_benchmark,dms.tag_025_benchmark +dms.directory_110_benchmark,D_0110,dms.directory_076_benchmark,,,,dms.tag_124_benchmark +dms.directory_111_benchmark,D_0111,dms.directory_091_benchmark,,,dms.category_025_benchmark,dms.tag_074_benchmark +dms.directory_112_benchmark,D_0112,dms.directory_066_benchmark,,,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_113_benchmark,D_0113,dms.directory_056_benchmark,,,,dms.tag_104_benchmark +dms.directory_114_benchmark,D_0114,dms.directory_031_benchmark,,,, +dms.directory_115_benchmark,D_0115,dms.directory_078_benchmark,,,,dms.tag_075_benchmark +dms.directory_116_benchmark,D_0116,dms.directory_099_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_117_benchmark,D_0117,dms.directory_043_benchmark,,,dms.category_040_benchmark,dms.tag_054_benchmark +dms.directory_118_benchmark,D_0118,dms.directory_042_benchmark,,,,dms.tag_108_benchmark +dms.directory_119_benchmark,D_0119,dms.directory_055_benchmark,,,dms.category_049_benchmark,dms.tag_007_benchmark +dms.directory_120_benchmark,D_0120,dms.directory_006_benchmark,,,,dms.tag_137_benchmark +dms.directory_121_benchmark,D_0121,dms.directory_020_benchmark,,,dms.category_005_benchmark,dms.tag_058_benchmark +dms.directory_122_benchmark,D_0122,dms.directory_096_benchmark,,,dms.category_039_benchmark,dms.tag_128_benchmark +dms.directory_123_benchmark,D_0123,dms.directory_079_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_124_benchmark,D_0124,dms.directory_050_benchmark,,,,dms.tag_010_benchmark +dms.directory_125_benchmark,D_0125,dms.directory_073_benchmark,,,dms.category_031_benchmark,dms.tag_114_benchmark +dms.directory_126_benchmark,D_0126,dms.directory_112_benchmark,,,dms.category_043_benchmark,dms.tag_079_benchmark +dms.directory_127_benchmark,D_0127,dms.directory_069_benchmark,,,dms.category_015_benchmark,dms.tag_056_benchmark +dms.directory_128_benchmark,D_0128,dms.directory_091_benchmark,,,dms.category_025_benchmark,dms.tag_112_benchmark +dms.directory_129_benchmark,D_0129,dms.directory_037_benchmark,,,dms.category_019_benchmark,dms.tag_055_benchmark +dms.directory_130_benchmark,D_0130,dms.directory_028_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_131_benchmark,D_0131,dms.directory_018_benchmark,,,dms.category_001_benchmark,dms.tag_102_benchmark +dms.directory_132_benchmark,D_0132,dms.directory_128_benchmark,,,dms.category_041_benchmark,dms.tag_115_benchmark +dms.directory_133_benchmark,D_0133,dms.directory_054_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_134_benchmark,D_0134,dms.directory_114_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_135_benchmark,D_0135,dms.directory_062_benchmark,,,dms.category_013_benchmark,dms.tag_068_benchmark +dms.directory_136_benchmark,D_0136,dms.directory_069_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_137_benchmark,D_0137,dms.directory_090_benchmark,,,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_138_benchmark,D_0138,dms.directory_065_benchmark,,,dms.category_040_benchmark,dms.tag_043_benchmark +dms.directory_139_benchmark,D_0139,dms.directory_125_benchmark,,,dms.category_034_benchmark,dms.tag_033_benchmark +dms.directory_140_benchmark,D_0140,dms.directory_067_benchmark,,,,dms.tag_108_benchmark +dms.directory_141_benchmark,D_0141,dms.directory_040_benchmark,,,dms.category_025_benchmark,dms.tag_074_benchmark +dms.directory_142_benchmark,D_0142,dms.directory_080_benchmark,,,dms.category_016_benchmark,dms.tag_100_benchmark +dms.directory_143_benchmark,D_0143,dms.directory_083_benchmark,,,dms.category_034_benchmark,dms.tag_047_benchmark +dms.directory_144_benchmark,D_0144,dms.directory_095_benchmark,,,,dms.tag_086_benchmark +dms.directory_145_benchmark,D_0145,dms.directory_003_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_146_benchmark,D_0146,dms.directory_126_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_147_benchmark,D_0147,dms.directory_099_benchmark,,,dms.category_005_benchmark,dms.tag_058_benchmark +dms.directory_148_benchmark,D_0148,dms.directory_086_benchmark,,,, +dms.directory_149_benchmark,D_0149,dms.directory_053_benchmark,,,dms.category_025_benchmark,dms.tag_082_benchmark +dms.directory_150_benchmark,D_0150,dms.directory_031_benchmark,,,dms.category_014_benchmark,dms.tag_078_benchmark +dms.directory_151_benchmark,D_0151,dms.directory_134_benchmark,,,dms.category_008_benchmark,dms.tag_077_benchmark +dms.directory_152_benchmark,D_0152,dms.directory_053_benchmark,,,dms.category_034_benchmark,dms.tag_109_benchmark +dms.directory_153_benchmark,D_0153,dms.directory_026_benchmark,,,dms.category_023_benchmark,dms.tag_038_benchmark +dms.directory_154_benchmark,D_0154,dms.directory_118_benchmark,,,,dms.tag_034_benchmark +dms.directory_155_benchmark,D_0155,dms.directory_058_benchmark,,,dms.category_027_benchmark,dms.tag_048_benchmark +dms.directory_156_benchmark,D_0156,dms.directory_077_benchmark,,,dms.category_009_benchmark,dms.tag_025_benchmark +dms.directory_157_benchmark,D_0157,dms.directory_089_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_158_benchmark,D_0158,dms.directory_033_benchmark,,,dms.category_023_benchmark,dms.tag_085_benchmark +dms.directory_159_benchmark,D_0159,dms.directory_010_benchmark,,,dms.category_001_benchmark,dms.tag_099_benchmark +dms.directory_160_benchmark,D_0160,dms.directory_006_benchmark,,,dms.category_007_benchmark,dms.tag_118_benchmark +dms.directory_161_benchmark,D_0161,dms.directory_018_benchmark,,,dms.category_041_benchmark,dms.tag_087_benchmark +dms.directory_162_benchmark,D_0162,dms.directory_026_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_163_benchmark,D_0163,dms.directory_118_benchmark,,,dms.category_004_benchmark,dms.tag_135_benchmark +dms.directory_164_benchmark,D_0164,dms.directory_130_benchmark,,,dms.category_041_benchmark,dms.tag_115_benchmark +dms.directory_165_benchmark,D_0165,dms.directory_104_benchmark,,,dms.category_043_benchmark,dms.tag_138_benchmark +dms.directory_166_benchmark,D_0166,dms.directory_083_benchmark,,,dms.category_014_benchmark,dms.tag_059_benchmark +dms.directory_167_benchmark,D_0167,dms.directory_095_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_168_benchmark,D_0168,dms.directory_021_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_169_benchmark,D_0169,dms.directory_087_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_170_benchmark,D_0170,dms.directory_147_benchmark,,,,dms.tag_006_benchmark +dms.directory_171_benchmark,D_0171,dms.directory_023_benchmark,,,dms.category_020_benchmark,dms.tag_141_benchmark +dms.directory_172_benchmark,D_0172,dms.directory_002_benchmark,,,dms.category_007_benchmark,dms.tag_118_benchmark +dms.directory_173_benchmark,D_0173,dms.directory_041_benchmark,,,dms.category_033_benchmark,dms.tag_113_benchmark +dms.directory_174_benchmark,D_0174,dms.directory_069_benchmark,,,dms.category_011_benchmark,dms.tag_144_benchmark +dms.directory_175_benchmark,D_0175,dms.directory_091_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_176_benchmark,D_0176,dms.directory_056_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_177_benchmark,D_0177,dms.directory_035_benchmark,,,dms.category_038_benchmark,dms.tag_092_benchmark +dms.directory_178_benchmark,D_0178,dms.directory_108_benchmark,,,dms.category_019_benchmark,dms.tag_055_benchmark +dms.directory_179_benchmark,D_0179,dms.directory_121_benchmark,,,dms.category_017_benchmark,dms.tag_011_benchmark +dms.directory_180_benchmark,D_0180,dms.directory_178_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_181_benchmark,D_0181,dms.directory_085_benchmark,,,,dms.tag_132_benchmark +dms.directory_182_benchmark,D_0182,dms.directory_103_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_183_benchmark,D_0183,dms.directory_086_benchmark,,,dms.category_041_benchmark,dms.tag_053_benchmark +dms.directory_184_benchmark,D_0184,dms.directory_029_benchmark,,,dms.category_011_benchmark,dms.tag_080_benchmark +dms.directory_185_benchmark,D_0185,dms.directory_170_benchmark,,,dms.category_019_benchmark,dms.tag_081_benchmark +dms.directory_186_benchmark,D_0186,dms.directory_100_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_187_benchmark,D_0187,dms.directory_034_benchmark,,,dms.category_034_benchmark,dms.tag_047_benchmark +dms.directory_188_benchmark,D_0188,dms.directory_072_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_189_benchmark,D_0189,dms.directory_022_benchmark,,,dms.category_019_benchmark,dms.tag_081_benchmark +dms.directory_190_benchmark,D_0190,dms.directory_076_benchmark,,,,dms.tag_013_benchmark +dms.directory_191_benchmark,D_0191,dms.directory_146_benchmark,,,,dms.tag_012_benchmark +dms.directory_192_benchmark,D_0192,dms.directory_023_benchmark,,,dms.category_025_benchmark,dms.tag_074_benchmark +dms.directory_193_benchmark,D_0193,dms.directory_183_benchmark,,,,dms.tag_032_benchmark +dms.directory_194_benchmark,D_0194,dms.directory_047_benchmark,,,dms.category_025_benchmark,dms.tag_082_benchmark +dms.directory_195_benchmark,D_0195,dms.directory_094_benchmark,,,dms.category_007_benchmark,dms.tag_118_benchmark +dms.directory_196_benchmark,D_0196,dms.directory_159_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_197_benchmark,D_0197,dms.directory_140_benchmark,,,dms.category_019_benchmark,dms.tag_105_benchmark +dms.directory_198_benchmark,D_0198,dms.directory_169_benchmark,,,dms.category_043_benchmark,dms.tag_079_benchmark +dms.directory_199_benchmark,D_0199,dms.directory_099_benchmark,,,dms.category_050_benchmark,dms.tag_110_benchmark +dms.directory_200_benchmark,D_0200,dms.directory_123_benchmark,,,dms.category_031_benchmark,dms.tag_116_benchmark +dms.directory_201_benchmark,D_0201,dms.directory_090_benchmark,,,dms.category_049_benchmark,dms.tag_093_benchmark +dms.directory_202_benchmark,D_0202,dms.directory_095_benchmark,,,dms.category_013_benchmark,dms.tag_068_benchmark +dms.directory_203_benchmark,D_0203,dms.directory_107_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_204_benchmark,D_0204,dms.directory_105_benchmark,,,,dms.tag_046_benchmark +dms.directory_205_benchmark,D_0205,dms.directory_092_benchmark,,,, +dms.directory_206_benchmark,D_0206,dms.directory_162_benchmark,,,dms.category_018_benchmark,dms.tag_083_benchmark +dms.directory_207_benchmark,D_0207,dms.directory_027_benchmark,,,dms.category_016_benchmark,dms.tag_147_benchmark +dms.directory_208_benchmark,D_0208,dms.directory_011_benchmark,,,,dms.tag_119_benchmark +dms.directory_209_benchmark,D_0209,dms.directory_135_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_210_benchmark,D_0210,dms.directory_160_benchmark,,,dms.category_007_benchmark,dms.tag_118_benchmark +dms.directory_211_benchmark,D_0211,dms.directory_015_benchmark,,,dms.category_041_benchmark,dms.tag_053_benchmark +dms.directory_212_benchmark,D_0212,dms.directory_087_benchmark,,,dms.category_049_benchmark,dms.tag_040_benchmark +dms.directory_213_benchmark,D_0213,dms.directory_015_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_214_benchmark,D_0214,dms.directory_100_benchmark,,,,dms.tag_065_benchmark +dms.directory_215_benchmark,D_0215,dms.directory_075_benchmark,,,,dms.tag_065_benchmark +dms.directory_216_benchmark,D_0216,dms.directory_040_benchmark,,,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_217_benchmark,D_0217,dms.directory_056_benchmark,,,dms.category_001_benchmark,dms.tag_099_benchmark +dms.directory_218_benchmark,D_0218,dms.directory_157_benchmark,,,,dms.tag_013_benchmark +dms.directory_219_benchmark,D_0219,dms.directory_154_benchmark,,,dms.category_034_benchmark,dms.tag_047_benchmark +dms.directory_220_benchmark,D_0220,dms.directory_207_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_221_benchmark,D_0221,dms.directory_041_benchmark,,,, +dms.directory_222_benchmark,D_0222,dms.directory_002_benchmark,,,dms.category_014_benchmark,dms.tag_107_benchmark +dms.directory_223_benchmark,D_0223,dms.directory_176_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_224_benchmark,D_0224,dms.directory_223_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_225_benchmark,D_0225,dms.directory_202_benchmark,,,dms.category_038_benchmark,dms.tag_092_benchmark +dms.directory_226_benchmark,D_0226,dms.directory_128_benchmark,,,dms.category_041_benchmark,dms.tag_115_benchmark +dms.directory_227_benchmark,D_0227,dms.directory_044_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_228_benchmark,D_0228,dms.directory_105_benchmark,,,dms.category_012_benchmark,dms.tag_098_benchmark +dms.directory_229_benchmark,D_0229,dms.directory_202_benchmark,,,dms.category_006_benchmark,dms.tag_041_benchmark +dms.directory_230_benchmark,D_0230,dms.directory_104_benchmark,,,dms.category_014_benchmark,dms.tag_107_benchmark +dms.directory_231_benchmark,D_0231,dms.directory_137_benchmark,,,,dms.tag_065_benchmark +dms.directory_232_benchmark,D_0232,dms.directory_179_benchmark,,,,dms.tag_119_benchmark +dms.directory_233_benchmark,D_0233,dms.directory_059_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_234_benchmark,D_0234,dms.directory_147_benchmark,,,,dms.tag_123_benchmark +dms.directory_235_benchmark,D_0235,dms.directory_114_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_236_benchmark,D_0236,dms.directory_033_benchmark,,,dms.category_014_benchmark,dms.tag_149_benchmark +dms.directory_237_benchmark,D_0237,dms.directory_037_benchmark,,,,dms.tag_006_benchmark +dms.directory_238_benchmark,D_0238,dms.directory_083_benchmark,,,dms.category_021_benchmark,dms.tag_140_benchmark +dms.directory_239_benchmark,D_0239,dms.directory_151_benchmark,,,dms.category_021_benchmark,dms.tag_026_benchmark +dms.directory_240_benchmark,D_0240,dms.directory_156_benchmark,,,dms.category_040_benchmark,dms.tag_054_benchmark +dms.directory_241_benchmark,D_0241,dms.directory_034_benchmark,,,, +dms.directory_242_benchmark,D_0242,dms.directory_177_benchmark,,,,dms.tag_032_benchmark +dms.directory_243_benchmark,D_0243,dms.directory_192_benchmark,,,,dms.tag_127_benchmark +dms.directory_244_benchmark,D_0244,dms.directory_022_benchmark,,,dms.category_043_benchmark,dms.tag_139_benchmark +dms.directory_245_benchmark,D_0245,dms.directory_031_benchmark,,,dms.category_017_benchmark,dms.tag_011_benchmark +dms.directory_246_benchmark,D_0246,dms.directory_051_benchmark,,,, +dms.directory_247_benchmark,D_0247,dms.directory_007_benchmark,,,dms.category_022_benchmark,dms.tag_061_benchmark +dms.directory_248_benchmark,D_0248,dms.directory_135_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_249_benchmark,D_0249,dms.directory_111_benchmark,,,,dms.tag_015_benchmark +dms.directory_250_benchmark,D_0250,dms.directory_016_benchmark,,,,dms.tag_123_benchmark +dms.directory_251_benchmark,D_0251,dms.directory_243_benchmark,,,dms.category_024_benchmark,dms.tag_049_benchmark +dms.directory_252_benchmark,D_0252,dms.directory_102_benchmark,,,,dms.tag_009_benchmark +dms.directory_253_benchmark,D_0253,dms.directory_063_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_254_benchmark,D_0254,dms.directory_185_benchmark,,,dms.category_025_benchmark,dms.tag_028_benchmark +dms.directory_255_benchmark,D_0255,dms.directory_024_benchmark,,,dms.category_015_benchmark,dms.tag_002_benchmark +dms.directory_256_benchmark,D_0256,dms.directory_054_benchmark,,,,dms.tag_016_benchmark +dms.directory_257_benchmark,D_0257,dms.directory_122_benchmark,,,,dms.tag_016_benchmark +dms.directory_258_benchmark,D_0258,dms.directory_115_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_259_benchmark,D_0259,dms.directory_136_benchmark,,,,dms.tag_063_benchmark +dms.directory_260_benchmark,D_0260,dms.directory_106_benchmark,,,dms.category_003_benchmark,dms.tag_076_benchmark +dms.directory_261_benchmark,D_0261,dms.directory_247_benchmark,,,, +dms.directory_262_benchmark,D_0262,dms.directory_077_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_263_benchmark,D_0263,dms.directory_017_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_264_benchmark,D_0264,dms.directory_061_benchmark,,,dms.category_043_benchmark,dms.tag_138_benchmark +dms.directory_265_benchmark,D_0265,dms.directory_138_benchmark,,,dms.category_041_benchmark,dms.tag_036_benchmark +dms.directory_266_benchmark,D_0266,dms.directory_252_benchmark,,,dms.category_043_benchmark,dms.tag_138_benchmark +dms.directory_267_benchmark,D_0267,dms.directory_159_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_268_benchmark,D_0268,dms.directory_184_benchmark,,,dms.category_035_benchmark,dms.tag_101_benchmark +dms.directory_269_benchmark,D_0269,dms.directory_253_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_270_benchmark,D_0270,dms.directory_095_benchmark,,,dms.category_039_benchmark,dms.tag_146_benchmark +dms.directory_271_benchmark,D_0271,dms.directory_078_benchmark,,,dms.category_005_benchmark,dms.tag_014_benchmark +dms.directory_272_benchmark,D_0272,dms.directory_022_benchmark,,,dms.category_015_benchmark,dms.tag_002_benchmark +dms.directory_273_benchmark,D_0273,dms.directory_076_benchmark,,,,dms.tag_013_benchmark +dms.directory_274_benchmark,D_0274,dms.directory_194_benchmark,,,dms.category_025_benchmark,dms.tag_112_benchmark +dms.directory_275_benchmark,D_0275,dms.directory_251_benchmark,,,dms.category_014_benchmark,dms.tag_149_benchmark +dms.directory_276_benchmark,D_0276,dms.directory_246_benchmark,,,dms.category_019_benchmark,dms.tag_081_benchmark +dms.directory_277_benchmark,D_0277,dms.directory_073_benchmark,,,dms.category_034_benchmark,dms.tag_033_benchmark +dms.directory_278_benchmark,D_0278,dms.directory_151_benchmark,,,,dms.tag_009_benchmark +dms.directory_279_benchmark,D_0279,dms.directory_143_benchmark,,,,dms.tag_010_benchmark +dms.directory_280_benchmark,D_0280,dms.directory_270_benchmark,,,dms.category_025_benchmark,dms.tag_112_benchmark +dms.directory_281_benchmark,D_0281,dms.directory_146_benchmark,,,dms.category_022_benchmark,dms.tag_020_benchmark +dms.directory_282_benchmark,D_0282,dms.directory_258_benchmark,,,,dms.tag_046_benchmark +dms.directory_283_benchmark,D_0283,dms.directory_098_benchmark,,,,dms.tag_013_benchmark +dms.directory_284_benchmark,D_0284,dms.directory_041_benchmark,,,,dms.tag_006_benchmark +dms.directory_285_benchmark,D_0285,dms.directory_239_benchmark,,,,dms.tag_037_benchmark +dms.directory_286_benchmark,D_0286,dms.directory_229_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_287_benchmark,D_0287,dms.directory_186_benchmark,,,dms.category_037_benchmark,dms.tag_088_benchmark +dms.directory_288_benchmark,D_0288,dms.directory_149_benchmark,,,dms.category_037_benchmark,dms.tag_088_benchmark +dms.directory_289_benchmark,D_0289,dms.directory_187_benchmark,,,dms.category_003_benchmark,dms.tag_076_benchmark +dms.directory_290_benchmark,D_0290,dms.directory_138_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_291_benchmark,D_0291,dms.directory_104_benchmark,,,,dms.tag_013_benchmark +dms.directory_292_benchmark,D_0292,dms.directory_188_benchmark,,,,dms.tag_094_benchmark +dms.directory_293_benchmark,D_0293,dms.directory_030_benchmark,,,dms.category_018_benchmark,dms.tag_083_benchmark +dms.directory_294_benchmark,D_0294,dms.directory_002_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_295_benchmark,D_0295,dms.directory_042_benchmark,,,,dms.tag_037_benchmark +dms.directory_296_benchmark,D_0296,dms.directory_281_benchmark,,,dms.category_037_benchmark,dms.tag_088_benchmark +dms.directory_297_benchmark,D_0297,dms.directory_152_benchmark,,,,dms.tag_012_benchmark +dms.directory_298_benchmark,D_0298,dms.directory_219_benchmark,,,,dms.tag_096_benchmark +dms.directory_299_benchmark,D_0299,dms.directory_133_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_300_benchmark,D_0300,dms.directory_024_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_301_benchmark,D_0301,dms.directory_006_benchmark,,,dms.category_020_benchmark,dms.tag_129_benchmark +dms.directory_302_benchmark,D_0302,dms.directory_211_benchmark,,,dms.category_016_benchmark,dms.tag_147_benchmark +dms.directory_303_benchmark,D_0303,dms.directory_210_benchmark,,,,dms.tag_044_benchmark +dms.directory_304_benchmark,D_0304,dms.directory_047_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_305_benchmark,D_0305,dms.directory_041_benchmark,,,dms.category_040_benchmark,dms.tag_054_benchmark +dms.directory_306_benchmark,D_0306,dms.directory_290_benchmark,,,,dms.tag_108_benchmark +dms.directory_307_benchmark,D_0307,dms.directory_278_benchmark,,,, +dms.directory_308_benchmark,D_0308,dms.directory_303_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_309_benchmark,D_0309,dms.directory_133_benchmark,,,dms.category_035_benchmark,dms.tag_101_benchmark +dms.directory_310_benchmark,D_0310,dms.directory_231_benchmark,,,dms.category_015_benchmark,dms.tag_089_benchmark +dms.directory_311_benchmark,D_0311,dms.directory_223_benchmark,,,dms.category_003_benchmark,dms.tag_106_benchmark +dms.directory_312_benchmark,D_0312,dms.directory_034_benchmark,,,dms.category_018_benchmark,dms.tag_018_benchmark +dms.directory_313_benchmark,D_0313,dms.directory_180_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_314_benchmark,D_0314,dms.directory_284_benchmark,,,,dms.tag_104_benchmark +dms.directory_315_benchmark,D_0315,dms.directory_024_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_316_benchmark,D_0316,dms.directory_297_benchmark,,,,dms.tag_044_benchmark +dms.directory_317_benchmark,D_0317,dms.directory_290_benchmark,,,dms.category_050_benchmark,dms.tag_029_benchmark +dms.directory_318_benchmark,D_0318,dms.directory_081_benchmark,,,dms.category_025_benchmark,dms.tag_097_benchmark +dms.directory_319_benchmark,D_0319,dms.directory_261_benchmark,,,dms.category_041_benchmark,dms.tag_115_benchmark +dms.directory_320_benchmark,D_0320,dms.directory_183_benchmark,,,,dms.tag_086_benchmark +dms.directory_321_benchmark,D_0321,dms.directory_311_benchmark,,,,dms.tag_015_benchmark +dms.directory_322_benchmark,D_0322,dms.directory_009_benchmark,,,,dms.tag_015_benchmark +dms.directory_323_benchmark,D_0323,dms.directory_226_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_324_benchmark,D_0324,dms.directory_013_benchmark,,,,dms.tag_037_benchmark +dms.directory_325_benchmark,D_0325,dms.directory_123_benchmark,,,dms.category_050_benchmark,dms.tag_050_benchmark +dms.directory_326_benchmark,D_0326,dms.directory_201_benchmark,,,,dms.tag_016_benchmark +dms.directory_327_benchmark,D_0327,dms.directory_029_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_328_benchmark,D_0328,dms.directory_231_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_329_benchmark,D_0329,dms.directory_207_benchmark,,,,dms.tag_016_benchmark +dms.directory_330_benchmark,D_0330,dms.directory_078_benchmark,,,dms.category_020_benchmark,dms.tag_141_benchmark +dms.directory_331_benchmark,D_0331,dms.directory_179_benchmark,,,,dms.tag_096_benchmark +dms.directory_332_benchmark,D_0332,dms.directory_019_benchmark,,,dms.category_039_benchmark,dms.tag_003_benchmark +dms.directory_333_benchmark,D_0333,dms.directory_246_benchmark,,,dms.category_034_benchmark,dms.tag_033_benchmark +dms.directory_334_benchmark,D_0334,dms.directory_194_benchmark,,,dms.category_016_benchmark,dms.tag_147_benchmark +dms.directory_335_benchmark,D_0335,dms.directory_190_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_336_benchmark,D_0336,dms.directory_244_benchmark,,,dms.category_039_benchmark,dms.tag_128_benchmark +dms.directory_337_benchmark,D_0337,dms.directory_148_benchmark,,,dms.category_003_benchmark,dms.tag_076_benchmark +dms.directory_338_benchmark,D_0338,dms.directory_197_benchmark,,,,dms.tag_090_benchmark +dms.directory_339_benchmark,D_0339,dms.directory_235_benchmark,,,,dms.tag_006_benchmark +dms.directory_340_benchmark,D_0340,dms.directory_219_benchmark,,,,dms.tag_060_benchmark +dms.directory_341_benchmark,D_0341,dms.directory_071_benchmark,,,dms.category_015_benchmark,dms.tag_089_benchmark +dms.directory_342_benchmark,D_0342,dms.directory_211_benchmark,,,dms.category_017_benchmark,dms.tag_017_benchmark +dms.directory_343_benchmark,D_0343,dms.directory_029_benchmark,,,,dms.tag_037_benchmark +dms.directory_344_benchmark,D_0344,dms.directory_271_benchmark,,,dms.category_004_benchmark,dms.tag_135_benchmark +dms.directory_345_benchmark,D_0345,dms.directory_098_benchmark,,,dms.category_004_benchmark,dms.tag_135_benchmark +dms.directory_346_benchmark,D_0346,dms.directory_065_benchmark,,,dms.category_007_benchmark,dms.tag_067_benchmark +dms.directory_347_benchmark,D_0347,dms.directory_263_benchmark,,,,dms.tag_044_benchmark +dms.directory_348_benchmark,D_0348,dms.directory_294_benchmark,,,dms.category_022_benchmark,dms.tag_020_benchmark +dms.directory_349_benchmark,D_0349,dms.directory_233_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_350_benchmark,D_0350,dms.directory_095_benchmark,,,dms.category_049_benchmark,dms.tag_040_benchmark +dms.directory_351_benchmark,D_0351,dms.directory_342_benchmark,,,dms.category_039_benchmark,dms.tag_003_benchmark +dms.directory_352_benchmark,D_0352,dms.directory_331_benchmark,,,,dms.tag_094_benchmark +dms.directory_353_benchmark,D_0353,dms.directory_067_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_354_benchmark,D_0354,dms.directory_269_benchmark,,,dms.category_022_benchmark,dms.tag_061_benchmark +dms.directory_355_benchmark,D_0355,dms.directory_045_benchmark,,,,dms.tag_104_benchmark +dms.directory_356_benchmark,D_0356,dms.directory_013_benchmark,,,dms.category_024_benchmark,dms.tag_049_benchmark +dms.directory_357_benchmark,D_0357,dms.directory_347_benchmark,,,dms.category_050_benchmark,dms.tag_110_benchmark +dms.directory_358_benchmark,D_0358,dms.directory_099_benchmark,,,dms.category_022_benchmark,dms.tag_020_benchmark +dms.directory_359_benchmark,D_0359,dms.directory_214_benchmark,,,,dms.tag_132_benchmark +dms.directory_360_benchmark,D_0360,dms.directory_043_benchmark,,,, +dms.directory_361_benchmark,D_0361,dms.directory_054_benchmark,,,,dms.tag_044_benchmark +dms.directory_362_benchmark,D_0362,dms.directory_320_benchmark,,,dms.category_011_benchmark,dms.tag_144_benchmark +dms.directory_363_benchmark,D_0363,dms.directory_020_benchmark,,,,dms.tag_134_benchmark +dms.directory_364_benchmark,D_0364,dms.directory_328_benchmark,,,dms.category_014_benchmark,dms.tag_107_benchmark +dms.directory_365_benchmark,D_0365,dms.directory_075_benchmark,,,,dms.tag_015_benchmark +dms.directory_366_benchmark,D_0366,dms.directory_147_benchmark,,,dms.category_041_benchmark,dms.tag_036_benchmark +dms.directory_367_benchmark,D_0367,dms.directory_318_benchmark,,,dms.category_001_benchmark,dms.tag_099_benchmark +dms.directory_368_benchmark,D_0368,dms.directory_143_benchmark,,,,dms.tag_108_benchmark +dms.directory_369_benchmark,D_0369,dms.directory_220_benchmark,,,dms.category_001_benchmark,dms.tag_122_benchmark +dms.directory_370_benchmark,D_0370,dms.directory_194_benchmark,,,dms.category_027_benchmark,dms.tag_001_benchmark +dms.directory_371_benchmark,D_0371,dms.directory_024_benchmark,,,dms.category_022_benchmark,dms.tag_073_benchmark +dms.directory_372_benchmark,D_0372,dms.directory_023_benchmark,,,dms.category_004_benchmark,dms.tag_135_benchmark +dms.directory_373_benchmark,D_0373,dms.directory_149_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_374_benchmark,D_0374,dms.directory_097_benchmark,,,dms.category_007_benchmark,dms.tag_118_benchmark +dms.directory_375_benchmark,D_0375,dms.directory_356_benchmark,,,,dms.tag_016_benchmark +dms.directory_376_benchmark,D_0376,dms.directory_106_benchmark,,,, +dms.directory_377_benchmark,D_0377,dms.directory_145_benchmark,,,dms.category_044_benchmark,dms.tag_095_benchmark +dms.directory_378_benchmark,D_0378,dms.directory_135_benchmark,,,dms.category_038_benchmark,dms.tag_092_benchmark +dms.directory_379_benchmark,D_0379,dms.directory_148_benchmark,,,dms.category_034_benchmark,dms.tag_109_benchmark +dms.directory_380_benchmark,D_0380,dms.directory_108_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_381_benchmark,D_0381,dms.directory_064_benchmark,,,dms.category_003_benchmark,dms.tag_076_benchmark +dms.directory_382_benchmark,D_0382,dms.directory_282_benchmark,,,dms.category_043_benchmark,dms.tag_139_benchmark +dms.directory_383_benchmark,D_0383,dms.directory_172_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_384_benchmark,D_0384,dms.directory_190_benchmark,,,dms.category_039_benchmark,dms.tag_003_benchmark +dms.directory_385_benchmark,D_0385,dms.directory_216_benchmark,,,dms.category_050_benchmark,dms.tag_029_benchmark +dms.directory_386_benchmark,D_0386,dms.directory_181_benchmark,,,dms.category_003_benchmark,dms.tag_145_benchmark +dms.directory_387_benchmark,D_0387,dms.directory_193_benchmark,,,dms.category_015_benchmark,dms.tag_002_benchmark +dms.directory_388_benchmark,D_0388,dms.directory_027_benchmark,,,dms.category_025_benchmark,dms.tag_082_benchmark +dms.directory_389_benchmark,D_0389,dms.directory_164_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_390_benchmark,D_0390,dms.directory_385_benchmark,,,dms.category_013_benchmark,dms.tag_031_benchmark +dms.directory_391_benchmark,D_0391,dms.directory_283_benchmark,,,,dms.tag_086_benchmark +dms.directory_392_benchmark,D_0392,dms.directory_213_benchmark,,,dms.category_029_benchmark,dms.tag_005_benchmark +dms.directory_393_benchmark,D_0393,dms.directory_013_benchmark,,,dms.category_046_benchmark,dms.tag_022_benchmark +dms.directory_394_benchmark,D_0394,dms.directory_214_benchmark,,,dms.category_034_benchmark,dms.tag_142_benchmark +dms.directory_395_benchmark,D_0395,dms.directory_352_benchmark,,,dms.category_001_benchmark,dms.tag_122_benchmark +dms.directory_396_benchmark,D_0396,dms.directory_030_benchmark,,,,dms.tag_132_benchmark +dms.directory_397_benchmark,D_0397,dms.directory_335_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_398_benchmark,D_0398,dms.directory_135_benchmark,,,dms.category_014_benchmark,dms.tag_059_benchmark +dms.directory_399_benchmark,D_0399,dms.directory_382_benchmark,,,dms.category_015_benchmark,dms.tag_120_benchmark +dms.directory_400_benchmark,D_0400,dms.directory_108_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_401_benchmark,D_0401,dms.directory_329_benchmark,,,dms.category_005_benchmark,dms.tag_014_benchmark +dms.directory_402_benchmark,D_0402,dms.directory_253_benchmark,,,dms.category_040_benchmark,dms.tag_072_benchmark +dms.directory_403_benchmark,D_0403,dms.directory_001_benchmark,,,dms.category_020_benchmark,dms.tag_129_benchmark +dms.directory_404_benchmark,D_0404,dms.directory_343_benchmark,,,dms.category_001_benchmark,dms.tag_122_benchmark +dms.directory_405_benchmark,D_0405,dms.directory_143_benchmark,,,dms.category_046_benchmark,dms.tag_062_benchmark +dms.directory_406_benchmark,D_0406,dms.directory_308_benchmark,,,dms.category_039_benchmark,dms.tag_128_benchmark +dms.directory_407_benchmark,D_0407,dms.directory_350_benchmark,,,dms.category_022_benchmark,dms.tag_020_benchmark +dms.directory_408_benchmark,D_0408,dms.directory_383_benchmark,,,dms.category_027_benchmark,dms.tag_001_benchmark +dms.directory_409_benchmark,D_0409,dms.directory_069_benchmark,,,,dms.tag_090_benchmark +dms.directory_410_benchmark,D_0410,dms.directory_239_benchmark,,,dms.category_025_benchmark,dms.tag_097_benchmark +dms.directory_411_benchmark,D_0411,dms.directory_208_benchmark,,,dms.category_046_benchmark,dms.tag_062_benchmark +dms.directory_412_benchmark,D_0412,dms.directory_053_benchmark,,,dms.category_014_benchmark,dms.tag_149_benchmark +dms.directory_413_benchmark,D_0413,dms.directory_191_benchmark,,,dms.category_046_benchmark,dms.tag_062_benchmark +dms.directory_414_benchmark,D_0414,dms.directory_151_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_415_benchmark,D_0415,dms.directory_151_benchmark,,,,dms.tag_090_benchmark +dms.directory_416_benchmark,D_0416,dms.directory_169_benchmark,,,dms.category_039_benchmark,dms.tag_146_benchmark +dms.directory_417_benchmark,D_0417,dms.directory_282_benchmark,,,dms.category_023_benchmark,dms.tag_038_benchmark +dms.directory_418_benchmark,D_0418,dms.directory_300_benchmark,,,dms.category_021_benchmark,dms.tag_026_benchmark +dms.directory_419_benchmark,D_0419,dms.directory_239_benchmark,,,dms.category_026_benchmark,dms.tag_027_benchmark +dms.directory_420_benchmark,D_0420,dms.directory_395_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_421_benchmark,D_0421,dms.directory_303_benchmark,,,dms.category_014_benchmark,dms.tag_078_benchmark +dms.directory_422_benchmark,D_0422,dms.directory_415_benchmark,,,dms.category_022_benchmark,dms.tag_061_benchmark +dms.directory_423_benchmark,D_0423,dms.directory_183_benchmark,,,,dms.tag_006_benchmark +dms.directory_424_benchmark,D_0424,dms.directory_253_benchmark,,,dms.category_037_benchmark,dms.tag_088_benchmark +dms.directory_425_benchmark,D_0425,dms.directory_383_benchmark,,,dms.category_014_benchmark,dms.tag_107_benchmark +dms.directory_426_benchmark,D_0426,dms.directory_421_benchmark,,,dms.category_012_benchmark,dms.tag_023_benchmark +dms.directory_427_benchmark,D_0427,dms.directory_036_benchmark,,,dms.category_043_benchmark,dms.tag_079_benchmark +dms.directory_428_benchmark,D_0428,dms.directory_151_benchmark,,,dms.category_016_benchmark,dms.tag_100_benchmark +dms.directory_429_benchmark,D_0429,dms.directory_008_benchmark,,,dms.category_011_benchmark,dms.tag_021_benchmark +dms.directory_430_benchmark,D_0430,dms.directory_201_benchmark,,,dms.category_041_benchmark,dms.tag_053_benchmark +dms.directory_431_benchmark,D_0431,dms.directory_125_benchmark,,,dms.category_011_benchmark,dms.tag_080_benchmark +dms.directory_432_benchmark,D_0432,dms.directory_275_benchmark,,,dms.category_001_benchmark,dms.tag_051_benchmark +dms.directory_433_benchmark,D_0433,dms.directory_290_benchmark,,,dms.category_033_benchmark,dms.tag_039_benchmark +dms.directory_434_benchmark,D_0434,dms.directory_351_benchmark,,,dms.category_013_benchmark,dms.tag_068_benchmark +dms.directory_435_benchmark,D_0435,dms.directory_089_benchmark,,,, +dms.directory_436_benchmark,D_0436,dms.directory_165_benchmark,,,, +dms.directory_437_benchmark,D_0437,dms.directory_346_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_438_benchmark,D_0438,dms.directory_312_benchmark,,,dms.category_025_benchmark,dms.tag_112_benchmark +dms.directory_439_benchmark,D_0439,dms.directory_330_benchmark,,,dms.category_017_benchmark,dms.tag_011_benchmark +dms.directory_440_benchmark,D_0440,dms.directory_288_benchmark,,,,dms.tag_134_benchmark +dms.directory_441_benchmark,D_0441,dms.directory_342_benchmark,,,dms.category_037_benchmark,dms.tag_088_benchmark +dms.directory_442_benchmark,D_0442,dms.directory_406_benchmark,,,dms.category_021_benchmark,dms.tag_026_benchmark +dms.directory_443_benchmark,D_0443,dms.directory_181_benchmark,,,dms.category_001_benchmark,dms.tag_143_benchmark +dms.directory_444_benchmark,D_0444,dms.directory_096_benchmark,,,dms.category_012_benchmark,dms.tag_057_benchmark +dms.directory_445_benchmark,D_0445,dms.directory_432_benchmark,,,dms.category_041_benchmark,dms.tag_087_benchmark +dms.directory_446_benchmark,D_0446,dms.directory_309_benchmark,,,,dms.tag_009_benchmark +dms.directory_447_benchmark,D_0447,dms.directory_230_benchmark,,,dms.category_043_benchmark,dms.tag_138_benchmark +dms.directory_448_benchmark,D_0448,dms.directory_035_benchmark,,,dms.category_028_benchmark,dms.tag_052_benchmark +dms.directory_449_benchmark,D_0449,dms.directory_262_benchmark,,,,dms.tag_015_benchmark +dms.directory_450_benchmark,D_0450,dms.directory_286_benchmark,,,dms.category_025_benchmark,dms.tag_028_benchmark +dms.directory_451_benchmark,D_0451,dms.directory_153_benchmark,,,dms.category_032_benchmark,dms.tag_064_benchmark +dms.directory_452_benchmark,D_0452,dms.directory_419_benchmark,,,dms.category_033_benchmark,dms.tag_039_benchmark +dms.directory_453_benchmark,D_0453,dms.directory_320_benchmark,,,dms.category_040_benchmark,dms.tag_024_benchmark +dms.directory_454_benchmark,D_0454,dms.directory_333_benchmark,,,,dms.tag_090_benchmark +dms.directory_455_benchmark,D_0455,dms.directory_362_benchmark,,,dms.category_046_benchmark,dms.tag_062_benchmark +dms.directory_456_benchmark,D_0456,dms.directory_334_benchmark,,,dms.category_028_benchmark,dms.tag_052_benchmark +dms.directory_457_benchmark,D_0457,dms.directory_340_benchmark,,,dms.category_043_benchmark,dms.tag_139_benchmark +dms.directory_458_benchmark,D_0458,dms.directory_365_benchmark,,,dms.category_033_benchmark,dms.tag_039_benchmark +dms.directory_459_benchmark,D_0459,dms.directory_291_benchmark,,,,dms.tag_046_benchmark +dms.directory_460_benchmark,D_0460,dms.directory_420_benchmark,,,,dms.tag_016_benchmark +dms.directory_461_benchmark,D_0461,dms.directory_390_benchmark,,,dms.category_050_benchmark,dms.tag_117_benchmark +dms.directory_462_benchmark,D_0462,dms.directory_021_benchmark,,,dms.category_027_benchmark,dms.tag_048_benchmark +dms.directory_463_benchmark,D_0463,dms.directory_402_benchmark,,,dms.category_021_benchmark,dms.tag_136_benchmark +dms.directory_464_benchmark,D_0464,dms.directory_041_benchmark,,,dms.category_040_benchmark,dms.tag_126_benchmark +dms.directory_465_benchmark,D_0465,dms.directory_053_benchmark,,,dms.category_008_benchmark,dms.tag_077_benchmark +dms.directory_466_benchmark,D_0466,dms.directory_446_benchmark,,,,dms.tag_123_benchmark +dms.directory_467_benchmark,D_0467,dms.directory_359_benchmark,,,dms.category_041_benchmark,dms.tag_115_benchmark +dms.directory_468_benchmark,D_0468,dms.directory_321_benchmark,,,dms.category_015_benchmark,dms.tag_056_benchmark +dms.directory_469_benchmark,D_0469,dms.directory_023_benchmark,,,dms.category_014_benchmark,dms.tag_103_benchmark +dms.directory_470_benchmark,D_0470,dms.directory_103_benchmark,,,dms.category_019_benchmark,dms.tag_125_benchmark +dms.directory_471_benchmark,D_0471,dms.directory_468_benchmark,,,dms.category_023_benchmark,dms.tag_085_benchmark +dms.directory_472_benchmark,D_0472,dms.directory_047_benchmark,,,dms.category_049_benchmark,dms.tag_035_benchmark +dms.directory_473_benchmark,D_0473,dms.directory_254_benchmark,,,dms.category_019_benchmark,dms.tag_125_benchmark +dms.directory_474_benchmark,D_0474,dms.directory_200_benchmark,,,dms.category_018_benchmark,dms.tag_133_benchmark +dms.directory_475_benchmark,D_0475,dms.directory_247_benchmark,,,dms.category_011_benchmark,dms.tag_144_benchmark +dms.directory_476_benchmark,D_0476,dms.directory_099_benchmark,,,dms.category_018_benchmark,dms.tag_018_benchmark +dms.directory_477_benchmark,D_0477,dms.directory_258_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_478_benchmark,D_0478,dms.directory_235_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_479_benchmark,D_0479,dms.directory_361_benchmark,,,dms.category_031_benchmark,dms.tag_111_benchmark +dms.directory_480_benchmark,D_0480,dms.directory_027_benchmark,,,dms.category_013_benchmark,dms.tag_068_benchmark +dms.directory_481_benchmark,D_0481,dms.directory_207_benchmark,,,dms.category_041_benchmark,dms.tag_053_benchmark +dms.directory_482_benchmark,D_0482,dms.directory_331_benchmark,,,,dms.tag_123_benchmark +dms.directory_483_benchmark,D_0483,dms.directory_381_benchmark,,,,dms.tag_063_benchmark +dms.directory_484_benchmark,D_0484,dms.directory_180_benchmark,,,dms.category_041_benchmark,dms.tag_036_benchmark +dms.directory_485_benchmark,D_0485,dms.directory_470_benchmark,,,dms.category_001_benchmark,dms.tag_143_benchmark +dms.directory_486_benchmark,D_0486,dms.directory_160_benchmark,,,dms.category_024_benchmark,dms.tag_084_benchmark +dms.directory_487_benchmark,D_0487,dms.directory_307_benchmark,,,dms.category_014_benchmark,dms.tag_107_benchmark +dms.directory_488_benchmark,D_0488,dms.directory_376_benchmark,,,,dms.tag_090_benchmark +dms.directory_489_benchmark,D_0489,dms.directory_371_benchmark,,,dms.category_005_benchmark,dms.tag_058_benchmark +dms.directory_490_benchmark,D_0490,dms.directory_329_benchmark,,,,dms.tag_086_benchmark +dms.directory_491_benchmark,D_0491,dms.directory_065_benchmark,,,dms.category_022_benchmark,dms.tag_020_benchmark +dms.directory_492_benchmark,D_0492,dms.directory_159_benchmark,,,, +dms.directory_493_benchmark,D_0493,dms.directory_261_benchmark,,,dms.category_037_benchmark,dms.tag_030_benchmark +dms.directory_494_benchmark,D_0494,dms.directory_398_benchmark,,,dms.category_041_benchmark,dms.tag_036_benchmark +dms.directory_495_benchmark,D_0495,dms.directory_028_benchmark,,,dms.category_031_benchmark,dms.tag_114_benchmark +dms.directory_496_benchmark,D_0496,dms.directory_284_benchmark,,,dms.category_025_benchmark,dms.tag_082_benchmark +dms.directory_497_benchmark,D_0497,dms.directory_160_benchmark,,,dms.category_005_benchmark,dms.tag_121_benchmark +dms.directory_498_benchmark,D_0498,dms.directory_321_benchmark,,,, +dms.directory_499_benchmark,D_0499,dms.directory_075_benchmark,,,,dms.tag_086_benchmark +dms.directory_500_benchmark,D_0500,dms.directory_385_benchmark,,,dms.category_001_benchmark,dms.tag_143_benchmark diff --git a/dms/tests/data/dms.file.csv b/dms/tests/data/dms.file.csv new file mode 100644 index 00000000..ee9eb58e --- /dev/null +++ b/dms/tests/data/dms.file.csv @@ -0,0 +1,1501 @@ +id,name,directory_id/id,category_id/id,tag_ids/id,content +dms.file_0001_benchmark,F_0001.txt,dms.directory_152_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0002_benchmark,F_0002.txt,dms.directory_456_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0003_benchmark,F_0003.txt,dms.directory_183_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0004_benchmark,F_0004.txt,dms.directory_024_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0005_benchmark,F_0005.txt,dms.directory_305_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0006_benchmark,F_0006.txt,dms.directory_449_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0007_benchmark,F_0007.txt,dms.directory_178_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0008_benchmark,F_0008.txt,dms.directory_406_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0009_benchmark,F_0009.txt,dms.directory_405_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0010_benchmark,F_0010.txt,dms.directory_050_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0011_benchmark,F_0011.txt,dms.directory_120_benchmark,,dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0012_benchmark,F_0012.txt,dms.directory_010_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0013_benchmark,F_0013.txt,dms.directory_214_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0014_benchmark,F_0014.txt,dms.directory_490_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0015_benchmark,F_0015.txt,dms.directory_435_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0016_benchmark,F_0016.txt,dms.directory_337_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0017_benchmark,F_0017.txt,dms.directory_146_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0018_benchmark,F_0018.txt,dms.directory_260_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0019_benchmark,F_0019.txt,dms.directory_483_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0020_benchmark,F_0020.txt,dms.directory_200_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0021_benchmark,F_0021.txt,dms.directory_426_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0022_benchmark,F_0022.txt,dms.directory_284_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0023_benchmark,F_0023.txt,dms.directory_463_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0024_benchmark,F_0024.txt,dms.directory_010_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0025_benchmark,F_0025.txt,dms.directory_077_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0026_benchmark,F_0026.txt,dms.directory_131_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0027_benchmark,F_0027.txt,dms.directory_072_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0028_benchmark,F_0028.txt,dms.directory_439_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0029_benchmark,F_0029.txt,dms.directory_314_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0030_benchmark,F_0030.txt,dms.directory_049_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0031_benchmark,F_0031.txt,dms.directory_272_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0032_benchmark,F_0032.txt,dms.directory_193_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0033_benchmark,F_0033.txt,dms.directory_151_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0034_benchmark,F_0034.txt,dms.directory_482_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0035_benchmark,F_0035.txt,dms.directory_317_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0036_benchmark,F_0036.txt,dms.directory_203_benchmark,,dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0037_benchmark,F_0037.txt,dms.directory_291_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0038_benchmark,F_0038.txt,dms.directory_191_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0039_benchmark,F_0039.txt,dms.directory_463_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0040_benchmark,F_0040.txt,dms.directory_036_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0041_benchmark,F_0041.txt,dms.directory_280_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0042_benchmark,F_0042.txt,dms.directory_366_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0043_benchmark,F_0043.txt,dms.directory_322_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0044_benchmark,F_0044.txt,dms.directory_271_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0045_benchmark,F_0045.txt,dms.directory_339_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0046_benchmark,F_0046.txt,dms.directory_011_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0047_benchmark,F_0047.txt,dms.directory_281_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0048_benchmark,F_0048.txt,dms.directory_314_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0049_benchmark,F_0049.txt,dms.directory_022_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0050_benchmark,F_0050.txt,dms.directory_308_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0051_benchmark,F_0051.txt,dms.directory_138_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0052_benchmark,F_0052.txt,dms.directory_332_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0053_benchmark,F_0053.txt,dms.directory_173_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0054_benchmark,F_0054.txt,dms.directory_499_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0055_benchmark,F_0055.txt,dms.directory_184_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0056_benchmark,F_0056.txt,dms.directory_067_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0057_benchmark,F_0057.txt,dms.directory_196_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0058_benchmark,F_0058.txt,dms.directory_222_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0059_benchmark,F_0059.txt,dms.directory_360_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0060_benchmark,F_0060.txt,dms.directory_260_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0061_benchmark,F_0061.txt,dms.directory_333_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0062_benchmark,F_0062.txt,dms.directory_491_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0063_benchmark,F_0063.txt,dms.directory_408_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0064_benchmark,F_0064.txt,dms.directory_210_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0065_benchmark,F_0065.txt,dms.directory_112_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0066_benchmark,F_0066.txt,dms.directory_090_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0067_benchmark,F_0067.txt,dms.directory_207_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0068_benchmark,F_0068.txt,dms.directory_078_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0069_benchmark,F_0069.txt,dms.directory_445_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0070_benchmark,F_0070.txt,dms.directory_408_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0071_benchmark,F_0071.txt,dms.directory_014_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0072_benchmark,F_0072.txt,dms.directory_065_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0073_benchmark,F_0073.txt,dms.directory_212_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0074_benchmark,F_0074.txt,dms.directory_297_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0075_benchmark,F_0075.txt,dms.directory_485_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0076_benchmark,F_0076.txt,dms.directory_341_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0077_benchmark,F_0077.txt,dms.directory_175_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0078_benchmark,F_0078.txt,dms.directory_202_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0079_benchmark,F_0079.txt,dms.directory_392_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0080_benchmark,F_0080.txt,dms.directory_336_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0081_benchmark,F_0081.txt,dms.directory_427_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0082_benchmark,F_0082.txt,dms.directory_404_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0083_benchmark,F_0083.txt,dms.directory_114_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0084_benchmark,F_0084.txt,dms.directory_281_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0085_benchmark,F_0085.txt,dms.directory_269_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0086_benchmark,F_0086.txt,dms.directory_145_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0087_benchmark,F_0087.txt,dms.directory_105_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0088_benchmark,F_0088.txt,dms.directory_452_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0089_benchmark,F_0089.txt,dms.directory_101_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0090_benchmark,F_0090.txt,dms.directory_387_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0091_benchmark,F_0091.txt,dms.directory_145_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0092_benchmark,F_0092.txt,dms.directory_320_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0093_benchmark,F_0093.txt,dms.directory_169_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0094_benchmark,F_0094.txt,dms.directory_171_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0095_benchmark,F_0095.txt,dms.directory_088_benchmark,,dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0096_benchmark,F_0096.txt,dms.directory_471_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0097_benchmark,F_0097.txt,dms.directory_442_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0098_benchmark,F_0098.txt,dms.directory_104_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0099_benchmark,F_0099.txt,dms.directory_398_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0100_benchmark,F_0100.txt,dms.directory_197_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0101_benchmark,F_0101.txt,dms.directory_194_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0102_benchmark,F_0102.txt,dms.directory_298_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0103_benchmark,F_0103.txt,dms.directory_150_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0104_benchmark,F_0104.txt,dms.directory_287_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0105_benchmark,F_0105.txt,dms.directory_419_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0106_benchmark,F_0106.txt,dms.directory_355_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0107_benchmark,F_0107.txt,dms.directory_462_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0108_benchmark,F_0108.txt,dms.directory_386_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0109_benchmark,F_0109.txt,dms.directory_245_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0110_benchmark,F_0110.txt,dms.directory_309_benchmark,,dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0111_benchmark,F_0111.txt,dms.directory_208_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0112_benchmark,F_0112.txt,dms.directory_416_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0113_benchmark,F_0113.txt,dms.directory_026_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0114_benchmark,F_0114.txt,dms.directory_253_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0115_benchmark,F_0115.txt,dms.directory_190_benchmark,,dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0116_benchmark,F_0116.txt,dms.directory_017_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0117_benchmark,F_0117.txt,dms.directory_159_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0118_benchmark,F_0118.txt,dms.directory_094_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0119_benchmark,F_0119.txt,dms.directory_132_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0120_benchmark,F_0120.txt,dms.directory_278_benchmark,,dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0121_benchmark,F_0121.txt,dms.directory_064_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0122_benchmark,F_0122.txt,dms.directory_141_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0123_benchmark,F_0123.txt,dms.directory_372_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0124_benchmark,F_0124.txt,dms.directory_074_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0125_benchmark,F_0125.txt,dms.directory_262_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0126_benchmark,F_0126.txt,dms.directory_466_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0127_benchmark,F_0127.txt,dms.directory_316_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0128_benchmark,F_0128.txt,dms.directory_411_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0129_benchmark,F_0129.txt,dms.directory_288_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0130_benchmark,F_0130.txt,dms.directory_401_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0131_benchmark,F_0131.txt,dms.directory_490_benchmark,dms.category_001_benchmark,dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0132_benchmark,F_0132.txt,dms.directory_317_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0133_benchmark,F_0133.txt,dms.directory_413_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0134_benchmark,F_0134.txt,dms.directory_063_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0135_benchmark,F_0135.txt,dms.directory_450_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0136_benchmark,F_0136.txt,dms.directory_268_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0137_benchmark,F_0137.txt,dms.directory_493_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0138_benchmark,F_0138.txt,dms.directory_252_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0139_benchmark,F_0139.txt,dms.directory_456_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0140_benchmark,F_0140.txt,dms.directory_134_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0141_benchmark,F_0141.txt,dms.directory_306_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0142_benchmark,F_0142.txt,dms.directory_074_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0143_benchmark,F_0143.txt,dms.directory_064_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0144_benchmark,F_0144.txt,dms.directory_330_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0145_benchmark,F_0145.txt,dms.directory_390_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0146_benchmark,F_0146.txt,dms.directory_409_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0147_benchmark,F_0147.txt,dms.directory_354_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0148_benchmark,F_0148.txt,dms.directory_335_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0149_benchmark,F_0149.txt,dms.directory_032_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0150_benchmark,F_0150.txt,dms.directory_164_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0151_benchmark,F_0151.txt,dms.directory_202_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0152_benchmark,F_0152.txt,dms.directory_456_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0153_benchmark,F_0153.txt,dms.directory_250_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0154_benchmark,F_0154.txt,dms.directory_252_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0155_benchmark,F_0155.txt,dms.directory_451_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0156_benchmark,F_0156.txt,dms.directory_151_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0157_benchmark,F_0157.txt,dms.directory_369_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0158_benchmark,F_0158.txt,dms.directory_409_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0159_benchmark,F_0159.txt,dms.directory_061_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0160_benchmark,F_0160.txt,dms.directory_403_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0161_benchmark,F_0161.txt,dms.directory_135_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0162_benchmark,F_0162.txt,dms.directory_273_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0163_benchmark,F_0163.txt,dms.directory_028_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0164_benchmark,F_0164.txt,dms.directory_146_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0165_benchmark,F_0165.txt,dms.directory_470_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0166_benchmark,F_0166.txt,dms.directory_132_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0167_benchmark,F_0167.txt,dms.directory_237_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0168_benchmark,F_0168.txt,dms.directory_330_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0169_benchmark,F_0169.txt,dms.directory_163_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0170_benchmark,F_0170.txt,dms.directory_355_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0171_benchmark,F_0171.txt,dms.directory_154_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0172_benchmark,F_0172.txt,dms.directory_155_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0173_benchmark,F_0173.txt,dms.directory_125_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0174_benchmark,F_0174.txt,dms.directory_214_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0175_benchmark,F_0175.txt,dms.directory_081_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0176_benchmark,F_0176.txt,dms.directory_238_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0177_benchmark,F_0177.txt,dms.directory_079_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0178_benchmark,F_0178.txt,dms.directory_384_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0179_benchmark,F_0179.txt,dms.directory_174_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0180_benchmark,F_0180.txt,dms.directory_444_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0181_benchmark,F_0181.txt,dms.directory_184_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0182_benchmark,F_0182.txt,dms.directory_115_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0183_benchmark,F_0183.txt,dms.directory_414_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0184_benchmark,F_0184.txt,dms.directory_267_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0185_benchmark,F_0185.txt,dms.directory_231_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0186_benchmark,F_0186.txt,dms.directory_207_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0187_benchmark,F_0187.txt,dms.directory_461_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0188_benchmark,F_0188.txt,dms.directory_146_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0189_benchmark,F_0189.txt,dms.directory_395_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0190_benchmark,F_0190.txt,dms.directory_218_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0191_benchmark,F_0191.txt,dms.directory_459_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0192_benchmark,F_0192.txt,dms.directory_129_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0193_benchmark,F_0193.txt,dms.directory_327_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0194_benchmark,F_0194.txt,dms.directory_438_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0195_benchmark,F_0195.txt,dms.directory_444_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0196_benchmark,F_0196.txt,dms.directory_025_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0197_benchmark,F_0197.txt,dms.directory_444_benchmark,dms.category_019_benchmark,dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0198_benchmark,F_0198.txt,dms.directory_494_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0199_benchmark,F_0199.txt,dms.directory_432_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0200_benchmark,F_0200.txt,dms.directory_209_benchmark,dms.category_031_benchmark,dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0201_benchmark,F_0201.txt,dms.directory_182_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0202_benchmark,F_0202.txt,dms.directory_214_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0203_benchmark,F_0203.txt,dms.directory_490_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0204_benchmark,F_0204.txt,dms.directory_272_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0205_benchmark,F_0205.txt,dms.directory_163_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0206_benchmark,F_0206.txt,dms.directory_435_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0207_benchmark,F_0207.txt,dms.directory_068_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0208_benchmark,F_0208.txt,dms.directory_459_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0209_benchmark,F_0209.txt,dms.directory_413_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0210_benchmark,F_0210.txt,dms.directory_128_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0211_benchmark,F_0211.txt,dms.directory_417_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0212_benchmark,F_0212.txt,dms.directory_278_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0213_benchmark,F_0213.txt,dms.directory_212_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0214_benchmark,F_0214.txt,dms.directory_277_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0215_benchmark,F_0215.txt,dms.directory_291_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0216_benchmark,F_0216.txt,dms.directory_074_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0217_benchmark,F_0217.txt,dms.directory_154_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0218_benchmark,F_0218.txt,dms.directory_466_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0219_benchmark,F_0219.txt,dms.directory_103_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0220_benchmark,F_0220.txt,dms.directory_396_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0221_benchmark,F_0221.txt,dms.directory_467_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0222_benchmark,F_0222.txt,dms.directory_300_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0223_benchmark,F_0223.txt,dms.directory_168_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0224_benchmark,F_0224.txt,dms.directory_313_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0225_benchmark,F_0225.txt,dms.directory_103_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0226_benchmark,F_0226.txt,dms.directory_175_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0227_benchmark,F_0227.txt,dms.directory_283_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0228_benchmark,F_0228.txt,dms.directory_494_benchmark,dms.category_012_benchmark,dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0229_benchmark,F_0229.txt,dms.directory_452_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0230_benchmark,F_0230.txt,dms.directory_393_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0231_benchmark,F_0231.txt,dms.directory_122_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0232_benchmark,F_0232.txt,dms.directory_186_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0233_benchmark,F_0233.txt,dms.directory_314_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0234_benchmark,F_0234.txt,dms.directory_075_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0235_benchmark,F_0235.txt,dms.directory_092_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0236_benchmark,F_0236.txt,dms.directory_379_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0237_benchmark,F_0237.txt,dms.directory_412_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0238_benchmark,F_0238.txt,dms.directory_308_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0239_benchmark,F_0239.txt,dms.directory_389_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0240_benchmark,F_0240.txt,dms.directory_145_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0241_benchmark,F_0241.txt,dms.directory_126_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0242_benchmark,F_0242.txt,dms.directory_025_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0243_benchmark,F_0243.txt,dms.directory_428_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0244_benchmark,F_0244.txt,dms.directory_295_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0245_benchmark,F_0245.txt,dms.directory_083_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0246_benchmark,F_0246.txt,dms.directory_436_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0247_benchmark,F_0247.txt,dms.directory_449_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0248_benchmark,F_0248.txt,dms.directory_256_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0249_benchmark,F_0249.txt,dms.directory_343_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0250_benchmark,F_0250.txt,dms.directory_067_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0251_benchmark,F_0251.txt,dms.directory_363_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0252_benchmark,F_0252.txt,dms.directory_275_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0253_benchmark,F_0253.txt,dms.directory_360_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0254_benchmark,F_0254.txt,dms.directory_395_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0255_benchmark,F_0255.txt,dms.directory_426_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0256_benchmark,F_0256.txt,dms.directory_074_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0257_benchmark,F_0257.txt,dms.directory_098_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0258_benchmark,F_0258.txt,dms.directory_358_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0259_benchmark,F_0259.txt,dms.directory_322_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0260_benchmark,F_0260.txt,dms.directory_150_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0261_benchmark,F_0261.txt,dms.directory_117_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0262_benchmark,F_0262.txt,dms.directory_122_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0263_benchmark,F_0263.txt,dms.directory_268_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0264_benchmark,F_0264.txt,dms.directory_298_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0265_benchmark,F_0265.txt,dms.directory_254_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0266_benchmark,F_0266.txt,dms.directory_171_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0267_benchmark,F_0267.txt,dms.directory_298_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0268_benchmark,F_0268.txt,dms.directory_057_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0269_benchmark,F_0269.txt,dms.directory_011_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0270_benchmark,F_0270.txt,dms.directory_154_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0271_benchmark,F_0271.txt,dms.directory_162_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0272_benchmark,F_0272.txt,dms.directory_406_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0273_benchmark,F_0273.txt,dms.directory_118_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0274_benchmark,F_0274.txt,dms.directory_256_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0275_benchmark,F_0275.txt,dms.directory_453_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0276_benchmark,F_0276.txt,dms.directory_024_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0277_benchmark,F_0277.txt,dms.directory_237_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0278_benchmark,F_0278.txt,dms.directory_039_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0279_benchmark,F_0279.txt,dms.directory_134_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0280_benchmark,F_0280.txt,dms.directory_085_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0281_benchmark,F_0281.txt,dms.directory_113_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0282_benchmark,F_0282.txt,dms.directory_091_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0283_benchmark,F_0283.txt,dms.directory_040_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0284_benchmark,F_0284.txt,dms.directory_141_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0285_benchmark,F_0285.txt,dms.directory_068_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0286_benchmark,F_0286.txt,dms.directory_105_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0287_benchmark,F_0287.txt,dms.directory_072_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0288_benchmark,F_0288.txt,dms.directory_479_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0289_benchmark,F_0289.txt,dms.directory_037_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0290_benchmark,F_0290.txt,dms.directory_337_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0291_benchmark,F_0291.txt,dms.directory_088_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0292_benchmark,F_0292.txt,dms.directory_329_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0293_benchmark,F_0293.txt,dms.directory_215_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0294_benchmark,F_0294.txt,dms.directory_269_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0295_benchmark,F_0295.txt,dms.directory_124_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0296_benchmark,F_0296.txt,dms.directory_188_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0297_benchmark,F_0297.txt,dms.directory_474_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0298_benchmark,F_0298.txt,dms.directory_220_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0299_benchmark,F_0299.txt,dms.directory_342_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0300_benchmark,F_0300.txt,dms.directory_194_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0301_benchmark,F_0301.txt,dms.directory_359_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0302_benchmark,F_0302.txt,dms.directory_198_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0303_benchmark,F_0303.txt,dms.directory_077_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0304_benchmark,F_0304.txt,dms.directory_203_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0305_benchmark,F_0305.txt,dms.directory_112_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0306_benchmark,F_0306.txt,dms.directory_314_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0307_benchmark,F_0307.txt,dms.directory_090_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0308_benchmark,F_0308.txt,dms.directory_488_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0309_benchmark,F_0309.txt,dms.directory_444_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0310_benchmark,F_0310.txt,dms.directory_277_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0311_benchmark,F_0311.txt,dms.directory_388_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0312_benchmark,F_0312.txt,dms.directory_461_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0313_benchmark,F_0313.txt,dms.directory_173_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0314_benchmark,F_0314.txt,dms.directory_012_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0315_benchmark,F_0315.txt,dms.directory_092_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0316_benchmark,F_0316.txt,dms.directory_299_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0317_benchmark,F_0317.txt,dms.directory_477_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0318_benchmark,F_0318.txt,dms.directory_442_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0319_benchmark,F_0319.txt,dms.directory_440_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0320_benchmark,F_0320.txt,dms.directory_211_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0321_benchmark,F_0321.txt,dms.directory_284_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0322_benchmark,F_0322.txt,dms.directory_347_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0323_benchmark,F_0323.txt,dms.directory_489_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0324_benchmark,F_0324.txt,dms.directory_393_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0325_benchmark,F_0325.txt,dms.directory_047_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0326_benchmark,F_0326.txt,dms.directory_362_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0327_benchmark,F_0327.txt,dms.directory_455_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0328_benchmark,F_0328.txt,dms.directory_021_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0329_benchmark,F_0329.txt,dms.directory_010_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0330_benchmark,F_0330.txt,dms.directory_327_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0331_benchmark,F_0331.txt,dms.directory_220_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0332_benchmark,F_0332.txt,dms.directory_190_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0333_benchmark,F_0333.txt,dms.directory_040_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0334_benchmark,F_0334.txt,dms.directory_013_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0335_benchmark,F_0335.txt,dms.directory_184_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0336_benchmark,F_0336.txt,dms.directory_212_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0337_benchmark,F_0337.txt,dms.directory_458_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0338_benchmark,F_0338.txt,dms.directory_015_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0339_benchmark,F_0339.txt,dms.directory_131_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0340_benchmark,F_0340.txt,dms.directory_261_benchmark,,dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0341_benchmark,F_0341.txt,dms.directory_308_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0342_benchmark,F_0342.txt,dms.directory_343_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0343_benchmark,F_0343.txt,dms.directory_077_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0344_benchmark,F_0344.txt,dms.directory_327_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0345_benchmark,F_0345.txt,dms.directory_052_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0346_benchmark,F_0346.txt,dms.directory_125_benchmark,dms.category_007_benchmark,dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0347_benchmark,F_0347.txt,dms.directory_310_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0348_benchmark,F_0348.txt,dms.directory_181_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0349_benchmark,F_0349.txt,dms.directory_066_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0350_benchmark,F_0350.txt,dms.directory_438_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0351_benchmark,F_0351.txt,dms.directory_416_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0352_benchmark,F_0352.txt,dms.directory_190_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0353_benchmark,F_0353.txt,dms.directory_033_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0354_benchmark,F_0354.txt,dms.directory_256_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0355_benchmark,F_0355.txt,dms.directory_082_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0356_benchmark,F_0356.txt,dms.directory_018_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0357_benchmark,F_0357.txt,dms.directory_074_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0358_benchmark,F_0358.txt,dms.directory_260_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0359_benchmark,F_0359.txt,dms.directory_398_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0360_benchmark,F_0360.txt,dms.directory_104_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0361_benchmark,F_0361.txt,dms.directory_137_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0362_benchmark,F_0362.txt,dms.directory_225_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0363_benchmark,F_0363.txt,dms.directory_230_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0364_benchmark,F_0364.txt,dms.directory_103_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0365_benchmark,F_0365.txt,dms.directory_276_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0366_benchmark,F_0366.txt,dms.directory_181_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0367_benchmark,F_0367.txt,dms.directory_331_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0368_benchmark,F_0368.txt,dms.directory_222_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0369_benchmark,F_0369.txt,dms.directory_498_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0370_benchmark,F_0370.txt,dms.directory_041_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0371_benchmark,F_0371.txt,dms.directory_007_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0372_benchmark,F_0372.txt,dms.directory_293_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0373_benchmark,F_0373.txt,dms.directory_028_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0374_benchmark,F_0374.txt,dms.directory_354_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0375_benchmark,F_0375.txt,dms.directory_031_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0376_benchmark,F_0376.txt,dms.directory_338_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0377_benchmark,F_0377.txt,dms.directory_336_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0378_benchmark,F_0378.txt,dms.directory_169_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0379_benchmark,F_0379.txt,dms.directory_044_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0380_benchmark,F_0380.txt,dms.directory_442_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0381_benchmark,F_0381.txt,dms.directory_147_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0382_benchmark,F_0382.txt,dms.directory_413_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0383_benchmark,F_0383.txt,dms.directory_059_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0384_benchmark,F_0384.txt,dms.directory_235_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0385_benchmark,F_0385.txt,dms.directory_051_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0386_benchmark,F_0386.txt,dms.directory_235_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0387_benchmark,F_0387.txt,dms.directory_278_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0388_benchmark,F_0388.txt,dms.directory_474_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0389_benchmark,F_0389.txt,dms.directory_290_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0390_benchmark,F_0390.txt,dms.directory_164_benchmark,dms.category_013_benchmark,dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0391_benchmark,F_0391.txt,dms.directory_275_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0392_benchmark,F_0392.txt,dms.directory_041_benchmark,dms.category_029_benchmark,dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0393_benchmark,F_0393.txt,dms.directory_168_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0394_benchmark,F_0394.txt,dms.directory_457_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0395_benchmark,F_0395.txt,dms.directory_274_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0396_benchmark,F_0396.txt,dms.directory_261_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0397_benchmark,F_0397.txt,dms.directory_481_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0398_benchmark,F_0398.txt,dms.directory_161_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0399_benchmark,F_0399.txt,dms.directory_173_benchmark,dms.category_015_benchmark,dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0400_benchmark,F_0400.txt,dms.directory_238_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0401_benchmark,F_0401.txt,dms.directory_382_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0402_benchmark,F_0402.txt,dms.directory_019_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0403_benchmark,F_0403.txt,dms.directory_201_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0404_benchmark,F_0404.txt,dms.directory_211_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0405_benchmark,F_0405.txt,dms.directory_155_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0406_benchmark,F_0406.txt,dms.directory_159_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0407_benchmark,F_0407.txt,dms.directory_188_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0408_benchmark,F_0408.txt,dms.directory_252_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0409_benchmark,F_0409.txt,dms.directory_410_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0410_benchmark,F_0410.txt,dms.directory_470_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0411_benchmark,F_0411.txt,dms.directory_028_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0412_benchmark,F_0412.txt,dms.directory_064_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0413_benchmark,F_0413.txt,dms.directory_440_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0414_benchmark,F_0414.txt,dms.directory_184_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0415_benchmark,F_0415.txt,dms.directory_396_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0416_benchmark,F_0416.txt,dms.directory_336_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0417_benchmark,F_0417.txt,dms.directory_204_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0418_benchmark,F_0418.txt,dms.directory_124_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0419_benchmark,F_0419.txt,dms.directory_032_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0420_benchmark,F_0420.txt,dms.directory_343_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0421_benchmark,F_0421.txt,dms.directory_114_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0422_benchmark,F_0422.txt,dms.directory_050_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0423_benchmark,F_0423.txt,dms.directory_020_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0424_benchmark,F_0424.txt,dms.directory_152_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0425_benchmark,F_0425.txt,dms.directory_140_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0426_benchmark,F_0426.txt,dms.directory_175_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0427_benchmark,F_0427.txt,dms.directory_231_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0428_benchmark,F_0428.txt,dms.directory_069_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0429_benchmark,F_0429.txt,dms.directory_094_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0430_benchmark,F_0430.txt,dms.directory_379_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0431_benchmark,F_0431.txt,dms.directory_161_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0432_benchmark,F_0432.txt,dms.directory_483_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0433_benchmark,F_0433.txt,dms.directory_043_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0434_benchmark,F_0434.txt,dms.directory_313_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0435_benchmark,F_0435.txt,dms.directory_339_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0436_benchmark,F_0436.txt,dms.directory_118_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0437_benchmark,F_0437.txt,dms.directory_373_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0438_benchmark,F_0438.txt,dms.directory_496_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0439_benchmark,F_0439.txt,dms.directory_343_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0440_benchmark,F_0440.txt,dms.directory_422_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0441_benchmark,F_0441.txt,dms.directory_288_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0442_benchmark,F_0442.txt,dms.directory_389_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0443_benchmark,F_0443.txt,dms.directory_128_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0444_benchmark,F_0444.txt,dms.directory_266_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0445_benchmark,F_0445.txt,dms.directory_438_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0446_benchmark,F_0446.txt,dms.directory_028_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0447_benchmark,F_0447.txt,dms.directory_087_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0448_benchmark,F_0448.txt,dms.directory_214_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0449_benchmark,F_0449.txt,dms.directory_048_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0450_benchmark,F_0450.txt,dms.directory_375_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0451_benchmark,F_0451.txt,dms.directory_271_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0452_benchmark,F_0452.txt,dms.directory_286_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0453_benchmark,F_0453.txt,dms.directory_271_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0454_benchmark,F_0454.txt,dms.directory_145_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0455_benchmark,F_0455.txt,dms.directory_096_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0456_benchmark,F_0456.txt,dms.directory_146_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0457_benchmark,F_0457.txt,dms.directory_136_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0458_benchmark,F_0458.txt,dms.directory_190_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0459_benchmark,F_0459.txt,dms.directory_449_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0460_benchmark,F_0460.txt,dms.directory_172_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0461_benchmark,F_0461.txt,dms.directory_127_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0462_benchmark,F_0462.txt,dms.directory_219_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0463_benchmark,F_0463.txt,dms.directory_095_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0464_benchmark,F_0464.txt,dms.directory_296_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0465_benchmark,F_0465.txt,dms.directory_321_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0466_benchmark,F_0466.txt,dms.directory_252_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0467_benchmark,F_0467.txt,dms.directory_297_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0468_benchmark,F_0468.txt,dms.directory_338_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0469_benchmark,F_0469.txt,dms.directory_277_benchmark,dms.category_014_benchmark,dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0470_benchmark,F_0470.txt,dms.directory_457_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0471_benchmark,F_0471.txt,dms.directory_011_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0472_benchmark,F_0472.txt,dms.directory_273_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0473_benchmark,F_0473.txt,dms.directory_011_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0474_benchmark,F_0474.txt,dms.directory_246_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0475_benchmark,F_0475.txt,dms.directory_129_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0476_benchmark,F_0476.txt,dms.directory_248_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0477_benchmark,F_0477.txt,dms.directory_024_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0478_benchmark,F_0478.txt,dms.directory_121_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0479_benchmark,F_0479.txt,dms.directory_097_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0480_benchmark,F_0480.txt,dms.directory_184_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0481_benchmark,F_0481.txt,dms.directory_347_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0482_benchmark,F_0482.txt,dms.directory_448_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0483_benchmark,F_0483.txt,dms.directory_283_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0484_benchmark,F_0484.txt,dms.directory_409_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0485_benchmark,F_0485.txt,dms.directory_090_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0486_benchmark,F_0486.txt,dms.directory_172_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0487_benchmark,F_0487.txt,dms.directory_096_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0488_benchmark,F_0488.txt,dms.directory_334_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0489_benchmark,F_0489.txt,dms.directory_145_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0490_benchmark,F_0490.txt,dms.directory_383_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0491_benchmark,F_0491.txt,dms.directory_222_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0492_benchmark,F_0492.txt,dms.directory_007_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0493_benchmark,F_0493.txt,dms.directory_483_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0494_benchmark,F_0494.txt,dms.directory_276_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0495_benchmark,F_0495.txt,dms.directory_476_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0496_benchmark,F_0496.txt,dms.directory_142_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0497_benchmark,F_0497.txt,dms.directory_500_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0498_benchmark,F_0498.txt,dms.directory_327_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0499_benchmark,F_0499.txt,dms.directory_260_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0500_benchmark,F_0500.txt,dms.directory_205_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0501_benchmark,F_0501.txt,dms.directory_354_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0502_benchmark,F_0502.txt,dms.directory_302_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0503_benchmark,F_0503.txt,dms.directory_486_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0504_benchmark,F_0504.txt,dms.directory_056_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0505_benchmark,F_0505.txt,dms.directory_037_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0506_benchmark,F_0506.txt,dms.directory_205_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0507_benchmark,F_0507.txt,dms.directory_291_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0508_benchmark,F_0508.txt,dms.directory_445_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0509_benchmark,F_0509.txt,dms.directory_344_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0510_benchmark,F_0510.txt,dms.directory_133_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0511_benchmark,F_0511.txt,dms.directory_453_benchmark,,dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0512_benchmark,F_0512.txt,dms.directory_046_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0513_benchmark,F_0513.txt,dms.directory_287_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0514_benchmark,F_0514.txt,dms.directory_150_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0515_benchmark,F_0515.txt,dms.directory_325_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0516_benchmark,F_0516.txt,dms.directory_136_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0517_benchmark,F_0517.txt,dms.directory_424_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0518_benchmark,F_0518.txt,dms.directory_163_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0519_benchmark,F_0519.txt,dms.directory_452_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0520_benchmark,F_0520.txt,dms.directory_365_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0521_benchmark,F_0521.txt,dms.directory_244_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0522_benchmark,F_0522.txt,dms.directory_373_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0523_benchmark,F_0523.txt,dms.directory_327_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0524_benchmark,F_0524.txt,dms.directory_127_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0525_benchmark,F_0525.txt,dms.directory_407_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0526_benchmark,F_0526.txt,dms.directory_367_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0527_benchmark,F_0527.txt,dms.directory_334_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0528_benchmark,F_0528.txt,dms.directory_183_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0529_benchmark,F_0529.txt,dms.directory_303_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0530_benchmark,F_0530.txt,dms.directory_310_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0531_benchmark,F_0531.txt,dms.directory_256_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0532_benchmark,F_0532.txt,dms.directory_036_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0533_benchmark,F_0533.txt,dms.directory_104_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0534_benchmark,F_0534.txt,dms.directory_481_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0535_benchmark,F_0535.txt,dms.directory_047_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0536_benchmark,F_0536.txt,dms.directory_477_benchmark,,dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0537_benchmark,F_0537.txt,dms.directory_477_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0538_benchmark,F_0538.txt,dms.directory_381_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0539_benchmark,F_0539.txt,dms.directory_343_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0540_benchmark,F_0540.txt,dms.directory_302_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0541_benchmark,F_0541.txt,dms.directory_108_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0542_benchmark,F_0542.txt,dms.directory_146_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0543_benchmark,F_0543.txt,dms.directory_450_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0544_benchmark,F_0544.txt,dms.directory_489_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0545_benchmark,F_0545.txt,dms.directory_255_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0546_benchmark,F_0546.txt,dms.directory_083_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0547_benchmark,F_0547.txt,dms.directory_128_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0548_benchmark,F_0548.txt,dms.directory_479_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0549_benchmark,F_0549.txt,dms.directory_374_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0550_benchmark,F_0550.txt,dms.directory_009_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0551_benchmark,F_0551.txt,dms.directory_491_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0552_benchmark,F_0552.txt,dms.directory_230_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0553_benchmark,F_0553.txt,dms.directory_324_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0554_benchmark,F_0554.txt,dms.directory_244_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0555_benchmark,F_0555.txt,dms.directory_264_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0556_benchmark,F_0556.txt,dms.directory_073_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0557_benchmark,F_0557.txt,dms.directory_379_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0558_benchmark,F_0558.txt,dms.directory_019_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0559_benchmark,F_0559.txt,dms.directory_106_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0560_benchmark,F_0560.txt,dms.directory_143_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0561_benchmark,F_0561.txt,dms.directory_278_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0562_benchmark,F_0562.txt,dms.directory_216_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0563_benchmark,F_0563.txt,dms.directory_418_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0564_benchmark,F_0564.txt,dms.directory_132_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0565_benchmark,F_0565.txt,dms.directory_258_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0566_benchmark,F_0566.txt,dms.directory_436_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0567_benchmark,F_0567.txt,dms.directory_018_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0568_benchmark,F_0568.txt,dms.directory_344_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0569_benchmark,F_0569.txt,dms.directory_038_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0570_benchmark,F_0570.txt,dms.directory_328_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0571_benchmark,F_0571.txt,dms.directory_159_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0572_benchmark,F_0572.txt,dms.directory_005_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0573_benchmark,F_0573.txt,dms.directory_470_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0574_benchmark,F_0574.txt,dms.directory_498_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0575_benchmark,F_0575.txt,dms.directory_161_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0576_benchmark,F_0576.txt,dms.directory_338_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0577_benchmark,F_0577.txt,dms.directory_346_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0578_benchmark,F_0578.txt,dms.directory_024_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0579_benchmark,F_0579.txt,dms.directory_318_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0580_benchmark,F_0580.txt,dms.directory_410_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0581_benchmark,F_0581.txt,dms.directory_324_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0582_benchmark,F_0582.txt,dms.directory_207_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0583_benchmark,F_0583.txt,dms.directory_459_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0584_benchmark,F_0584.txt,dms.directory_138_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0585_benchmark,F_0585.txt,dms.directory_104_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0586_benchmark,F_0586.txt,dms.directory_169_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0587_benchmark,F_0587.txt,dms.directory_123_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0588_benchmark,F_0588.txt,dms.directory_202_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0589_benchmark,F_0589.txt,dms.directory_208_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0590_benchmark,F_0590.txt,dms.directory_029_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0591_benchmark,F_0591.txt,dms.directory_412_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0592_benchmark,F_0592.txt,dms.directory_259_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0593_benchmark,F_0593.txt,dms.directory_339_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0594_benchmark,F_0594.txt,dms.directory_129_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0595_benchmark,F_0595.txt,dms.directory_495_benchmark,,dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0596_benchmark,F_0596.txt,dms.directory_138_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0597_benchmark,F_0597.txt,dms.directory_292_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0598_benchmark,F_0598.txt,dms.directory_148_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0599_benchmark,F_0599.txt,dms.directory_286_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0600_benchmark,F_0600.txt,dms.directory_111_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0601_benchmark,F_0601.txt,dms.directory_349_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0602_benchmark,F_0602.txt,dms.directory_331_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0603_benchmark,F_0603.txt,dms.directory_054_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0604_benchmark,F_0604.txt,dms.directory_183_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0605_benchmark,F_0605.txt,dms.directory_170_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0606_benchmark,F_0606.txt,dms.directory_455_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0607_benchmark,F_0607.txt,dms.directory_348_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0608_benchmark,F_0608.txt,dms.directory_464_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0609_benchmark,F_0609.txt,dms.directory_414_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0610_benchmark,F_0610.txt,dms.directory_151_benchmark,,dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0611_benchmark,F_0611.txt,dms.directory_311_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0612_benchmark,F_0612.txt,dms.directory_493_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0613_benchmark,F_0613.txt,dms.directory_262_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0614_benchmark,F_0614.txt,dms.directory_339_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0615_benchmark,F_0615.txt,dms.directory_262_benchmark,,dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0616_benchmark,F_0616.txt,dms.directory_292_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0617_benchmark,F_0617.txt,dms.directory_370_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0618_benchmark,F_0618.txt,dms.directory_218_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0619_benchmark,F_0619.txt,dms.directory_438_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0620_benchmark,F_0620.txt,dms.directory_469_benchmark,,dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0621_benchmark,F_0621.txt,dms.directory_174_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0622_benchmark,F_0622.txt,dms.directory_132_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0623_benchmark,F_0623.txt,dms.directory_427_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0624_benchmark,F_0624.txt,dms.directory_081_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0625_benchmark,F_0625.txt,dms.directory_015_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0626_benchmark,F_0626.txt,dms.directory_385_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0627_benchmark,F_0627.txt,dms.directory_158_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0628_benchmark,F_0628.txt,dms.directory_022_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0629_benchmark,F_0629.txt,dms.directory_378_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0630_benchmark,F_0630.txt,dms.directory_240_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0631_benchmark,F_0631.txt,dms.directory_299_benchmark,dms.category_001_benchmark,dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0632_benchmark,F_0632.txt,dms.directory_239_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0633_benchmark,F_0633.txt,dms.directory_428_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0634_benchmark,F_0634.txt,dms.directory_401_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0635_benchmark,F_0635.txt,dms.directory_048_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0636_benchmark,F_0636.txt,dms.directory_176_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0637_benchmark,F_0637.txt,dms.directory_037_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0638_benchmark,F_0638.txt,dms.directory_360_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0639_benchmark,F_0639.txt,dms.directory_452_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0640_benchmark,F_0640.txt,dms.directory_257_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0641_benchmark,F_0641.txt,dms.directory_453_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0642_benchmark,F_0642.txt,dms.directory_429_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0643_benchmark,F_0643.txt,dms.directory_468_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0644_benchmark,F_0644.txt,dms.directory_277_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0645_benchmark,F_0645.txt,dms.directory_240_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0646_benchmark,F_0646.txt,dms.directory_346_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0647_benchmark,F_0647.txt,dms.directory_067_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0648_benchmark,F_0648.txt,dms.directory_419_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0649_benchmark,F_0649.txt,dms.directory_275_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0650_benchmark,F_0650.txt,dms.directory_004_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0651_benchmark,F_0651.txt,dms.directory_359_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0652_benchmark,F_0652.txt,dms.directory_398_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0653_benchmark,F_0653.txt,dms.directory_045_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0654_benchmark,F_0654.txt,dms.directory_241_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0655_benchmark,F_0655.txt,dms.directory_299_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0656_benchmark,F_0656.txt,dms.directory_272_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0657_benchmark,F_0657.txt,dms.directory_139_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0658_benchmark,F_0658.txt,dms.directory_415_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0659_benchmark,F_0659.txt,dms.directory_111_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0660_benchmark,F_0660.txt,dms.directory_265_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0661_benchmark,F_0661.txt,dms.directory_439_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0662_benchmark,F_0662.txt,dms.directory_234_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0663_benchmark,F_0663.txt,dms.directory_310_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0664_benchmark,F_0664.txt,dms.directory_367_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0665_benchmark,F_0665.txt,dms.directory_163_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0666_benchmark,F_0666.txt,dms.directory_032_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0667_benchmark,F_0667.txt,dms.directory_319_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0668_benchmark,F_0668.txt,dms.directory_436_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0669_benchmark,F_0669.txt,dms.directory_162_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0670_benchmark,F_0670.txt,dms.directory_352_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0671_benchmark,F_0671.txt,dms.directory_462_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0672_benchmark,F_0672.txt,dms.directory_334_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0673_benchmark,F_0673.txt,dms.directory_456_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0674_benchmark,F_0674.txt,dms.directory_473_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0675_benchmark,F_0675.txt,dms.directory_085_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0676_benchmark,F_0676.txt,dms.directory_467_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0677_benchmark,F_0677.txt,dms.directory_268_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0678_benchmark,F_0678.txt,dms.directory_066_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0679_benchmark,F_0679.txt,dms.directory_006_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0680_benchmark,F_0680.txt,dms.directory_426_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0681_benchmark,F_0681.txt,dms.directory_011_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0682_benchmark,F_0682.txt,dms.directory_460_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0683_benchmark,F_0683.txt,dms.directory_053_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0684_benchmark,F_0684.txt,dms.directory_233_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0685_benchmark,F_0685.txt,dms.directory_330_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0686_benchmark,F_0686.txt,dms.directory_070_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0687_benchmark,F_0687.txt,dms.directory_418_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0688_benchmark,F_0688.txt,dms.directory_220_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0689_benchmark,F_0689.txt,dms.directory_488_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0690_benchmark,F_0690.txt,dms.directory_204_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0691_benchmark,F_0691.txt,dms.directory_426_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0692_benchmark,F_0692.txt,dms.directory_343_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0693_benchmark,F_0693.txt,dms.directory_423_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0694_benchmark,F_0694.txt,dms.directory_409_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0695_benchmark,F_0695.txt,dms.directory_427_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0696_benchmark,F_0696.txt,dms.directory_117_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0697_benchmark,F_0697.txt,dms.directory_222_benchmark,dms.category_019_benchmark,dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0698_benchmark,F_0698.txt,dms.directory_232_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0699_benchmark,F_0699.txt,dms.directory_277_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0700_benchmark,F_0700.txt,dms.directory_480_benchmark,dms.category_031_benchmark,dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0701_benchmark,F_0701.txt,dms.directory_002_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0702_benchmark,F_0702.txt,dms.directory_137_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0703_benchmark,F_0703.txt,dms.directory_409_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0704_benchmark,F_0704.txt,dms.directory_340_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0705_benchmark,F_0705.txt,dms.directory_499_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0706_benchmark,F_0706.txt,dms.directory_387_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0707_benchmark,F_0707.txt,dms.directory_487_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0708_benchmark,F_0708.txt,dms.directory_005_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0709_benchmark,F_0709.txt,dms.directory_322_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0710_benchmark,F_0710.txt,dms.directory_186_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0711_benchmark,F_0711.txt,dms.directory_085_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0712_benchmark,F_0712.txt,dms.directory_223_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0713_benchmark,F_0713.txt,dms.directory_092_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0714_benchmark,F_0714.txt,dms.directory_339_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0715_benchmark,F_0715.txt,dms.directory_453_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0716_benchmark,F_0716.txt,dms.directory_281_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0717_benchmark,F_0717.txt,dms.directory_167_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0718_benchmark,F_0718.txt,dms.directory_175_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0719_benchmark,F_0719.txt,dms.directory_403_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0720_benchmark,F_0720.txt,dms.directory_431_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0721_benchmark,F_0721.txt,dms.directory_426_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0722_benchmark,F_0722.txt,dms.directory_208_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0723_benchmark,F_0723.txt,dms.directory_469_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0724_benchmark,F_0724.txt,dms.directory_059_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0725_benchmark,F_0725.txt,dms.directory_331_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0726_benchmark,F_0726.txt,dms.directory_385_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0727_benchmark,F_0727.txt,dms.directory_140_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0728_benchmark,F_0728.txt,dms.directory_339_benchmark,dms.category_012_benchmark,dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0729_benchmark,F_0729.txt,dms.directory_024_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0730_benchmark,F_0730.txt,dms.directory_153_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0731_benchmark,F_0731.txt,dms.directory_143_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0732_benchmark,F_0732.txt,dms.directory_441_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0733_benchmark,F_0733.txt,dms.directory_316_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0734_benchmark,F_0734.txt,dms.directory_006_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0735_benchmark,F_0735.txt,dms.directory_461_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0736_benchmark,F_0736.txt,dms.directory_083_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0737_benchmark,F_0737.txt,dms.directory_098_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0738_benchmark,F_0738.txt,dms.directory_427_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0739_benchmark,F_0739.txt,dms.directory_126_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0740_benchmark,F_0740.txt,dms.directory_429_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0741_benchmark,F_0741.txt,dms.directory_211_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0742_benchmark,F_0742.txt,dms.directory_147_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0743_benchmark,F_0743.txt,dms.directory_384_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0744_benchmark,F_0744.txt,dms.directory_388_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0745_benchmark,F_0745.txt,dms.directory_122_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0746_benchmark,F_0746.txt,dms.directory_221_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0747_benchmark,F_0747.txt,dms.directory_073_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0748_benchmark,F_0748.txt,dms.directory_500_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0749_benchmark,F_0749.txt,dms.directory_244_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0750_benchmark,F_0750.txt,dms.directory_261_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0751_benchmark,F_0751.txt,dms.directory_233_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0752_benchmark,F_0752.txt,dms.directory_297_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0753_benchmark,F_0753.txt,dms.directory_024_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0754_benchmark,F_0754.txt,dms.directory_158_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0755_benchmark,F_0755.txt,dms.directory_128_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0756_benchmark,F_0756.txt,dms.directory_028_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0757_benchmark,F_0757.txt,dms.directory_196_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0758_benchmark,F_0758.txt,dms.directory_495_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0759_benchmark,F_0759.txt,dms.directory_420_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0760_benchmark,F_0760.txt,dms.directory_101_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0761_benchmark,F_0761.txt,dms.directory_474_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0762_benchmark,F_0762.txt,dms.directory_156_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0763_benchmark,F_0763.txt,dms.directory_028_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0764_benchmark,F_0764.txt,dms.directory_347_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0765_benchmark,F_0765.txt,dms.directory_267_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0766_benchmark,F_0766.txt,dms.directory_491_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0767_benchmark,F_0767.txt,dms.directory_379_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0768_benchmark,F_0768.txt,dms.directory_008_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0769_benchmark,F_0769.txt,dms.directory_161_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0770_benchmark,F_0770.txt,dms.directory_286_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0771_benchmark,F_0771.txt,dms.directory_164_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0772_benchmark,F_0772.txt,dms.directory_488_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0773_benchmark,F_0773.txt,dms.directory_398_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0774_benchmark,F_0774.txt,dms.directory_461_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0775_benchmark,F_0775.txt,dms.directory_385_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0776_benchmark,F_0776.txt,dms.directory_300_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0777_benchmark,F_0777.txt,dms.directory_225_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0778_benchmark,F_0778.txt,dms.directory_277_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0779_benchmark,F_0779.txt,dms.directory_122_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0780_benchmark,F_0780.txt,dms.directory_006_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0781_benchmark,F_0781.txt,dms.directory_044_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0782_benchmark,F_0782.txt,dms.directory_173_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0783_benchmark,F_0783.txt,dms.directory_499_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0784_benchmark,F_0784.txt,dms.directory_379_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0785_benchmark,F_0785.txt,dms.directory_467_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0786_benchmark,F_0786.txt,dms.directory_476_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0787_benchmark,F_0787.txt,dms.directory_170_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0788_benchmark,F_0788.txt,dms.directory_107_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0789_benchmark,F_0789.txt,dms.directory_267_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0790_benchmark,F_0790.txt,dms.directory_143_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0791_benchmark,F_0791.txt,dms.directory_146_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0792_benchmark,F_0792.txt,dms.directory_366_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0793_benchmark,F_0793.txt,dms.directory_492_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0794_benchmark,F_0794.txt,dms.directory_371_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0795_benchmark,F_0795.txt,dms.directory_084_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0796_benchmark,F_0796.txt,dms.directory_302_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0797_benchmark,F_0797.txt,dms.directory_487_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0798_benchmark,F_0798.txt,dms.directory_207_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0799_benchmark,F_0799.txt,dms.directory_338_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0800_benchmark,F_0800.txt,dms.directory_235_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0801_benchmark,F_0801.txt,dms.directory_243_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0802_benchmark,F_0802.txt,dms.directory_148_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0803_benchmark,F_0803.txt,dms.directory_412_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0804_benchmark,F_0804.txt,dms.directory_478_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0805_benchmark,F_0805.txt,dms.directory_345_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0806_benchmark,F_0806.txt,dms.directory_090_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0807_benchmark,F_0807.txt,dms.directory_453_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0808_benchmark,F_0808.txt,dms.directory_433_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0809_benchmark,F_0809.txt,dms.directory_229_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0810_benchmark,F_0810.txt,dms.directory_437_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0811_benchmark,F_0811.txt,dms.directory_284_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0812_benchmark,F_0812.txt,dms.directory_253_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0813_benchmark,F_0813.txt,dms.directory_237_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0814_benchmark,F_0814.txt,dms.directory_392_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0815_benchmark,F_0815.txt,dms.directory_481_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0816_benchmark,F_0816.txt,dms.directory_215_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0817_benchmark,F_0817.txt,dms.directory_356_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0818_benchmark,F_0818.txt,dms.directory_372_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0819_benchmark,F_0819.txt,dms.directory_491_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0820_benchmark,F_0820.txt,dms.directory_008_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0821_benchmark,F_0821.txt,dms.directory_267_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0822_benchmark,F_0822.txt,dms.directory_494_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0823_benchmark,F_0823.txt,dms.directory_336_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0824_benchmark,F_0824.txt,dms.directory_290_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0825_benchmark,F_0825.txt,dms.directory_282_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0826_benchmark,F_0826.txt,dms.directory_049_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0827_benchmark,F_0827.txt,dms.directory_245_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0828_benchmark,F_0828.txt,dms.directory_007_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0829_benchmark,F_0829.txt,dms.directory_295_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0830_benchmark,F_0830.txt,dms.directory_386_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0831_benchmark,F_0831.txt,dms.directory_400_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0832_benchmark,F_0832.txt,dms.directory_125_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0833_benchmark,F_0833.txt,dms.directory_231_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0834_benchmark,F_0834.txt,dms.directory_047_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0835_benchmark,F_0835.txt,dms.directory_143_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0836_benchmark,F_0836.txt,dms.directory_365_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0837_benchmark,F_0837.txt,dms.directory_393_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0838_benchmark,F_0838.txt,dms.directory_436_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0839_benchmark,F_0839.txt,dms.directory_432_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0840_benchmark,F_0840.txt,dms.directory_266_benchmark,,dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0841_benchmark,F_0841.txt,dms.directory_360_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0842_benchmark,F_0842.txt,dms.directory_144_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0843_benchmark,F_0843.txt,dms.directory_413_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0844_benchmark,F_0844.txt,dms.directory_341_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0845_benchmark,F_0845.txt,dms.directory_198_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0846_benchmark,F_0846.txt,dms.directory_008_benchmark,dms.category_007_benchmark,dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0847_benchmark,F_0847.txt,dms.directory_427_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0848_benchmark,F_0848.txt,dms.directory_264_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0849_benchmark,F_0849.txt,dms.directory_373_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0850_benchmark,F_0850.txt,dms.directory_383_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0851_benchmark,F_0851.txt,dms.directory_091_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0852_benchmark,F_0852.txt,dms.directory_250_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0853_benchmark,F_0853.txt,dms.directory_220_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0854_benchmark,F_0854.txt,dms.directory_356_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0855_benchmark,F_0855.txt,dms.directory_279_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0856_benchmark,F_0856.txt,dms.directory_172_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0857_benchmark,F_0857.txt,dms.directory_009_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0858_benchmark,F_0858.txt,dms.directory_352_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0859_benchmark,F_0859.txt,dms.directory_245_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0860_benchmark,F_0860.txt,dms.directory_028_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0861_benchmark,F_0861.txt,dms.directory_079_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0862_benchmark,F_0862.txt,dms.directory_255_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0863_benchmark,F_0863.txt,dms.directory_364_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0864_benchmark,F_0864.txt,dms.directory_269_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0865_benchmark,F_0865.txt,dms.directory_134_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0866_benchmark,F_0866.txt,dms.directory_471_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0867_benchmark,F_0867.txt,dms.directory_295_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0868_benchmark,F_0868.txt,dms.directory_181_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0869_benchmark,F_0869.txt,dms.directory_087_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0870_benchmark,F_0870.txt,dms.directory_361_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0871_benchmark,F_0871.txt,dms.directory_403_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0872_benchmark,F_0872.txt,dms.directory_472_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0873_benchmark,F_0873.txt,dms.directory_380_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0874_benchmark,F_0874.txt,dms.directory_272_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0875_benchmark,F_0875.txt,dms.directory_464_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0876_benchmark,F_0876.txt,dms.directory_422_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0877_benchmark,F_0877.txt,dms.directory_197_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0878_benchmark,F_0878.txt,dms.directory_158_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0879_benchmark,F_0879.txt,dms.directory_041_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0880_benchmark,F_0880.txt,dms.directory_046_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0881_benchmark,F_0881.txt,dms.directory_458_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0882_benchmark,F_0882.txt,dms.directory_298_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0883_benchmark,F_0883.txt,dms.directory_288_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0884_benchmark,F_0884.txt,dms.directory_476_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0885_benchmark,F_0885.txt,dms.directory_177_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0886_benchmark,F_0886.txt,dms.directory_102_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0887_benchmark,F_0887.txt,dms.directory_058_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0888_benchmark,F_0888.txt,dms.directory_216_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0889_benchmark,F_0889.txt,dms.directory_403_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0890_benchmark,F_0890.txt,dms.directory_332_benchmark,dms.category_013_benchmark,dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0891_benchmark,F_0891.txt,dms.directory_346_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0892_benchmark,F_0892.txt,dms.directory_327_benchmark,dms.category_029_benchmark,dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0893_benchmark,F_0893.txt,dms.directory_104_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0894_benchmark,F_0894.txt,dms.directory_211_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0895_benchmark,F_0895.txt,dms.directory_087_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0896_benchmark,F_0896.txt,dms.directory_437_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0897_benchmark,F_0897.txt,dms.directory_347_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0898_benchmark,F_0898.txt,dms.directory_460_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0899_benchmark,F_0899.txt,dms.directory_191_benchmark,dms.category_015_benchmark,dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0900_benchmark,F_0900.txt,dms.directory_277_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0901_benchmark,F_0901.txt,dms.directory_035_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0902_benchmark,F_0902.txt,dms.directory_056_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0903_benchmark,F_0903.txt,dms.directory_433_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0904_benchmark,F_0904.txt,dms.directory_345_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0905_benchmark,F_0905.txt,dms.directory_486_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0906_benchmark,F_0906.txt,dms.directory_373_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0907_benchmark,F_0907.txt,dms.directory_288_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0908_benchmark,F_0908.txt,dms.directory_096_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0909_benchmark,F_0909.txt,dms.directory_077_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0910_benchmark,F_0910.txt,dms.directory_075_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0911_benchmark,F_0911.txt,dms.directory_473_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0912_benchmark,F_0912.txt,dms.directory_422_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0913_benchmark,F_0913.txt,dms.directory_208_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0914_benchmark,F_0914.txt,dms.directory_130_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0915_benchmark,F_0915.txt,dms.directory_455_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0916_benchmark,F_0916.txt,dms.directory_115_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0917_benchmark,F_0917.txt,dms.directory_358_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0918_benchmark,F_0918.txt,dms.directory_292_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0919_benchmark,F_0919.txt,dms.directory_292_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0920_benchmark,F_0920.txt,dms.directory_193_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0921_benchmark,F_0921.txt,dms.directory_179_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0922_benchmark,F_0922.txt,dms.directory_241_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0923_benchmark,F_0923.txt,dms.directory_400_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0924_benchmark,F_0924.txt,dms.directory_167_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0925_benchmark,F_0925.txt,dms.directory_300_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0926_benchmark,F_0926.txt,dms.directory_450_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0927_benchmark,F_0927.txt,dms.directory_395_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0928_benchmark,F_0928.txt,dms.directory_173_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0929_benchmark,F_0929.txt,dms.directory_148_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0930_benchmark,F_0930.txt,dms.directory_229_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0931_benchmark,F_0931.txt,dms.directory_453_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0932_benchmark,F_0932.txt,dms.directory_384_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0933_benchmark,F_0933.txt,dms.directory_378_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0934_benchmark,F_0934.txt,dms.directory_077_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0935_benchmark,F_0935.txt,dms.directory_309_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0936_benchmark,F_0936.txt,dms.directory_091_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0937_benchmark,F_0937.txt,dms.directory_332_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0938_benchmark,F_0938.txt,dms.directory_235_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0939_benchmark,F_0939.txt,dms.directory_428_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0940_benchmark,F_0940.txt,dms.directory_423_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0941_benchmark,F_0941.txt,dms.directory_417_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0942_benchmark,F_0942.txt,dms.directory_001_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0943_benchmark,F_0943.txt,dms.directory_445_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0944_benchmark,F_0944.txt,dms.directory_102_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0945_benchmark,F_0945.txt,dms.directory_049_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0946_benchmark,F_0946.txt,dms.directory_148_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0947_benchmark,F_0947.txt,dms.directory_039_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0948_benchmark,F_0948.txt,dms.directory_270_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0949_benchmark,F_0949.txt,dms.directory_138_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0950_benchmark,F_0950.txt,dms.directory_391_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0951_benchmark,F_0951.txt,dms.directory_428_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0952_benchmark,F_0952.txt,dms.directory_249_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0953_benchmark,F_0953.txt,dms.directory_225_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0954_benchmark,F_0954.txt,dms.directory_259_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0955_benchmark,F_0955.txt,dms.directory_304_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0956_benchmark,F_0956.txt,dms.directory_185_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0957_benchmark,F_0957.txt,dms.directory_272_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0958_benchmark,F_0958.txt,dms.directory_498_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0959_benchmark,F_0959.txt,dms.directory_062_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0960_benchmark,F_0960.txt,dms.directory_044_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0961_benchmark,F_0961.txt,dms.directory_454_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0962_benchmark,F_0962.txt,dms.directory_164_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0963_benchmark,F_0963.txt,dms.directory_268_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0964_benchmark,F_0964.txt,dms.directory_089_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0965_benchmark,F_0965.txt,dms.directory_214_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0966_benchmark,F_0966.txt,dms.directory_473_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0967_benchmark,F_0967.txt,dms.directory_195_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0968_benchmark,F_0968.txt,dms.directory_483_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0969_benchmark,F_0969.txt,dms.directory_007_benchmark,dms.category_014_benchmark,dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0970_benchmark,F_0970.txt,dms.directory_286_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0971_benchmark,F_0971.txt,dms.directory_078_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0972_benchmark,F_0972.txt,dms.directory_012_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0973_benchmark,F_0973.txt,dms.directory_229_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0974_benchmark,F_0974.txt,dms.directory_471_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0975_benchmark,F_0975.txt,dms.directory_460_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0976_benchmark,F_0976.txt,dms.directory_105_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0977_benchmark,F_0977.txt,dms.directory_483_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0978_benchmark,F_0978.txt,dms.directory_292_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0979_benchmark,F_0979.txt,dms.directory_344_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0980_benchmark,F_0980.txt,dms.directory_058_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0981_benchmark,F_0981.txt,dms.directory_463_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0982_benchmark,F_0982.txt,dms.directory_098_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0983_benchmark,F_0983.txt,dms.directory_291_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0984_benchmark,F_0984.txt,dms.directory_027_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0985_benchmark,F_0985.txt,dms.directory_460_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0986_benchmark,F_0986.txt,dms.directory_499_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0987_benchmark,F_0987.txt,dms.directory_395_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0988_benchmark,F_0988.txt,dms.directory_213_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0989_benchmark,F_0989.txt,dms.directory_006_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0990_benchmark,F_0990.txt,dms.directory_276_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0991_benchmark,F_0991.txt,dms.directory_287_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0992_benchmark,F_0992.txt,dms.directory_250_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0993_benchmark,F_0993.txt,dms.directory_059_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0994_benchmark,F_0994.txt,dms.directory_476_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0995_benchmark,F_0995.txt,dms.directory_156_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0996_benchmark,F_0996.txt,dms.directory_367_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0997_benchmark,F_0997.txt,dms.directory_125_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0998_benchmark,F_0998.txt,dms.directory_477_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_0999_benchmark,F_0999.txt,dms.directory_324_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1000_benchmark,F_1000.txt,dms.directory_447_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1001_benchmark,F_1001.txt,dms.directory_220_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1002_benchmark,F_1002.txt,dms.directory_286_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1003_benchmark,F_1003.txt,dms.directory_331_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1004_benchmark,F_1004.txt,dms.directory_010_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1005_benchmark,F_1005.txt,dms.directory_048_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1006_benchmark,F_1006.txt,dms.directory_495_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1007_benchmark,F_1007.txt,dms.directory_037_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1008_benchmark,F_1008.txt,dms.directory_495_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1009_benchmark,F_1009.txt,dms.directory_039_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1010_benchmark,F_1010.txt,dms.directory_082_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1011_benchmark,F_1011.txt,dms.directory_267_benchmark,,dms.tag_130_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1012_benchmark,F_1012.txt,dms.directory_356_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1013_benchmark,F_1013.txt,dms.directory_418_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1014_benchmark,F_1014.txt,dms.directory_271_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1015_benchmark,F_1015.txt,dms.directory_173_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1016_benchmark,F_1016.txt,dms.directory_347_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1017_benchmark,F_1017.txt,dms.directory_068_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1018_benchmark,F_1018.txt,dms.directory_476_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1019_benchmark,F_1019.txt,dms.directory_003_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1020_benchmark,F_1020.txt,dms.directory_272_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1021_benchmark,F_1021.txt,dms.directory_437_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1022_benchmark,F_1022.txt,dms.directory_271_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1023_benchmark,F_1023.txt,dms.directory_371_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1024_benchmark,F_1024.txt,dms.directory_374_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1025_benchmark,F_1025.txt,dms.directory_271_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1026_benchmark,F_1026.txt,dms.directory_415_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1027_benchmark,F_1027.txt,dms.directory_279_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1028_benchmark,F_1028.txt,dms.directory_440_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1029_benchmark,F_1029.txt,dms.directory_341_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1030_benchmark,F_1030.txt,dms.directory_263_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1031_benchmark,F_1031.txt,dms.directory_418_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1032_benchmark,F_1032.txt,dms.directory_444_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1033_benchmark,F_1033.txt,dms.directory_166_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1034_benchmark,F_1034.txt,dms.directory_442_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1035_benchmark,F_1035.txt,dms.directory_122_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1036_benchmark,F_1036.txt,dms.directory_092_benchmark,,dms.tag_070_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1037_benchmark,F_1037.txt,dms.directory_424_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1038_benchmark,F_1038.txt,dms.directory_482_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1039_benchmark,F_1039.txt,dms.directory_221_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1040_benchmark,F_1040.txt,dms.directory_388_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1041_benchmark,F_1041.txt,dms.directory_273_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1042_benchmark,F_1042.txt,dms.directory_015_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1043_benchmark,F_1043.txt,dms.directory_376_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1044_benchmark,F_1044.txt,dms.directory_087_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1045_benchmark,F_1045.txt,dms.directory_032_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1046_benchmark,F_1046.txt,dms.directory_405_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1047_benchmark,F_1047.txt,dms.directory_133_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1048_benchmark,F_1048.txt,dms.directory_485_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1049_benchmark,F_1049.txt,dms.directory_354_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1050_benchmark,F_1050.txt,dms.directory_145_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1051_benchmark,F_1051.txt,dms.directory_326_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1052_benchmark,F_1052.txt,dms.directory_042_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1053_benchmark,F_1053.txt,dms.directory_118_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1054_benchmark,F_1054.txt,dms.directory_330_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1055_benchmark,F_1055.txt,dms.directory_045_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1056_benchmark,F_1056.txt,dms.directory_394_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1057_benchmark,F_1057.txt,dms.directory_336_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1058_benchmark,F_1058.txt,dms.directory_043_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1059_benchmark,F_1059.txt,dms.directory_154_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1060_benchmark,F_1060.txt,dms.directory_294_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1061_benchmark,F_1061.txt,dms.directory_309_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1062_benchmark,F_1062.txt,dms.directory_350_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1063_benchmark,F_1063.txt,dms.directory_491_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1064_benchmark,F_1064.txt,dms.directory_349_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1065_benchmark,F_1065.txt,dms.directory_162_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1066_benchmark,F_1066.txt,dms.directory_486_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1067_benchmark,F_1067.txt,dms.directory_411_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1068_benchmark,F_1068.txt,dms.directory_489_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1069_benchmark,F_1069.txt,dms.directory_375_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1070_benchmark,F_1070.txt,dms.directory_392_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1071_benchmark,F_1071.txt,dms.directory_340_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1072_benchmark,F_1072.txt,dms.directory_026_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1073_benchmark,F_1073.txt,dms.directory_418_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1074_benchmark,F_1074.txt,dms.directory_035_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1075_benchmark,F_1075.txt,dms.directory_268_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1076_benchmark,F_1076.txt,dms.directory_308_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1077_benchmark,F_1077.txt,dms.directory_491_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1078_benchmark,F_1078.txt,dms.directory_188_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1079_benchmark,F_1079.txt,dms.directory_324_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1080_benchmark,F_1080.txt,dms.directory_170_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1081_benchmark,F_1081.txt,dms.directory_163_benchmark,,dms.tag_091_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1082_benchmark,F_1082.txt,dms.directory_327_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1083_benchmark,F_1083.txt,dms.directory_079_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1084_benchmark,F_1084.txt,dms.directory_052_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1085_benchmark,F_1085.txt,dms.directory_153_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1086_benchmark,F_1086.txt,dms.directory_299_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1087_benchmark,F_1087.txt,dms.directory_080_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1088_benchmark,F_1088.txt,dms.directory_158_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1089_benchmark,F_1089.txt,dms.directory_195_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1090_benchmark,F_1090.txt,dms.directory_164_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1091_benchmark,F_1091.txt,dms.directory_290_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1092_benchmark,F_1092.txt,dms.directory_072_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1093_benchmark,F_1093.txt,dms.directory_430_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1094_benchmark,F_1094.txt,dms.directory_180_benchmark,dms.category_041_benchmark,dms.tag_042_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1095_benchmark,F_1095.txt,dms.directory_297_benchmark,,dms.tag_004_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1096_benchmark,F_1096.txt,dms.directory_038_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1097_benchmark,F_1097.txt,dms.directory_245_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1098_benchmark,F_1098.txt,dms.directory_416_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1099_benchmark,F_1099.txt,dms.directory_242_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1100_benchmark,F_1100.txt,dms.directory_263_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1101_benchmark,F_1101.txt,dms.directory_196_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1102_benchmark,F_1102.txt,dms.directory_492_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1103_benchmark,F_1103.txt,dms.directory_301_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1104_benchmark,F_1104.txt,dms.directory_220_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1105_benchmark,F_1105.txt,dms.directory_304_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1106_benchmark,F_1106.txt,dms.directory_266_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1107_benchmark,F_1107.txt,dms.directory_179_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1108_benchmark,F_1108.txt,dms.directory_049_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1109_benchmark,F_1109.txt,dms.directory_365_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1110_benchmark,F_1110.txt,dms.directory_286_benchmark,,dms.tag_124_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1111_benchmark,F_1111.txt,dms.directory_141_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1112_benchmark,F_1112.txt,dms.directory_479_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1113_benchmark,F_1113.txt,dms.directory_484_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1114_benchmark,F_1114.txt,dms.directory_166_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1115_benchmark,F_1115.txt,dms.directory_336_benchmark,,dms.tag_075_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1116_benchmark,F_1116.txt,dms.directory_169_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1117_benchmark,F_1117.txt,dms.directory_174_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1118_benchmark,F_1118.txt,dms.directory_105_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1119_benchmark,F_1119.txt,dms.directory_131_benchmark,dms.category_049_benchmark,dms.tag_007_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1120_benchmark,F_1120.txt,dms.directory_234_benchmark,,dms.tag_137_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1121_benchmark,F_1121.txt,dms.directory_125_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1122_benchmark,F_1122.txt,dms.directory_258_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1123_benchmark,F_1123.txt,dms.directory_018_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1124_benchmark,F_1124.txt,dms.directory_007_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1125_benchmark,F_1125.txt,dms.directory_102_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1126_benchmark,F_1126.txt,dms.directory_239_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1127_benchmark,F_1127.txt,dms.directory_369_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1128_benchmark,F_1128.txt,dms.directory_115_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1129_benchmark,F_1129.txt,dms.directory_006_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1130_benchmark,F_1130.txt,dms.directory_483_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1131_benchmark,F_1131.txt,dms.directory_215_benchmark,dms.category_001_benchmark,dms.tag_102_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1132_benchmark,F_1132.txt,dms.directory_300_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1133_benchmark,F_1133.txt,dms.directory_410_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1134_benchmark,F_1134.txt,dms.directory_416_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1135_benchmark,F_1135.txt,dms.directory_476_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1136_benchmark,F_1136.txt,dms.directory_260_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1137_benchmark,F_1137.txt,dms.directory_411_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1138_benchmark,F_1138.txt,dms.directory_377_benchmark,dms.category_040_benchmark,dms.tag_043_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1139_benchmark,F_1139.txt,dms.directory_147_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1140_benchmark,F_1140.txt,dms.directory_312_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1141_benchmark,F_1141.txt,dms.directory_133_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1142_benchmark,F_1142.txt,dms.directory_045_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1143_benchmark,F_1143.txt,dms.directory_356_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1144_benchmark,F_1144.txt,dms.directory_009_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1145_benchmark,F_1145.txt,dms.directory_362_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1146_benchmark,F_1146.txt,dms.directory_323_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1147_benchmark,F_1147.txt,dms.directory_117_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1148_benchmark,F_1148.txt,dms.directory_353_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1149_benchmark,F_1149.txt,dms.directory_066_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1150_benchmark,F_1150.txt,dms.directory_068_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1151_benchmark,F_1151.txt,dms.directory_316_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1152_benchmark,F_1152.txt,dms.directory_368_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1153_benchmark,F_1153.txt,dms.directory_294_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1154_benchmark,F_1154.txt,dms.directory_065_benchmark,,dms.tag_034_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1155_benchmark,F_1155.txt,dms.directory_171_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1156_benchmark,F_1156.txt,dms.directory_149_benchmark,dms.category_009_benchmark,dms.tag_025_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1157_benchmark,F_1157.txt,dms.directory_396_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1158_benchmark,F_1158.txt,dms.directory_107_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1159_benchmark,F_1159.txt,dms.directory_380_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1160_benchmark,F_1160.txt,dms.directory_259_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1161_benchmark,F_1161.txt,dms.directory_391_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1162_benchmark,F_1162.txt,dms.directory_476_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1163_benchmark,F_1163.txt,dms.directory_053_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1164_benchmark,F_1164.txt,dms.directory_408_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1165_benchmark,F_1165.txt,dms.directory_450_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1166_benchmark,F_1166.txt,dms.directory_160_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1167_benchmark,F_1167.txt,dms.directory_415_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1168_benchmark,F_1168.txt,dms.directory_185_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1169_benchmark,F_1169.txt,dms.directory_281_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1170_benchmark,F_1170.txt,dms.directory_345_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1171_benchmark,F_1171.txt,dms.directory_357_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1172_benchmark,F_1172.txt,dms.directory_071_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1173_benchmark,F_1173.txt,dms.directory_016_benchmark,dms.category_033_benchmark,dms.tag_113_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1174_benchmark,F_1174.txt,dms.directory_246_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1175_benchmark,F_1175.txt,dms.directory_368_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1176_benchmark,F_1176.txt,dms.directory_154_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1177_benchmark,F_1177.txt,dms.directory_461_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1178_benchmark,F_1178.txt,dms.directory_170_benchmark,dms.category_019_benchmark,dms.tag_055_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1179_benchmark,F_1179.txt,dms.directory_039_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1180_benchmark,F_1180.txt,dms.directory_458_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1181_benchmark,F_1181.txt,dms.directory_286_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1182_benchmark,F_1182.txt,dms.directory_126_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1183_benchmark,F_1183.txt,dms.directory_160_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1184_benchmark,F_1184.txt,dms.directory_032_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1185_benchmark,F_1185.txt,dms.directory_202_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1186_benchmark,F_1186.txt,dms.directory_279_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1187_benchmark,F_1187.txt,dms.directory_040_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1188_benchmark,F_1188.txt,dms.directory_201_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1189_benchmark,F_1189.txt,dms.directory_127_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1190_benchmark,F_1190.txt,dms.directory_222_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1191_benchmark,F_1191.txt,dms.directory_233_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1192_benchmark,F_1192.txt,dms.directory_134_benchmark,dms.category_025_benchmark,dms.tag_074_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1193_benchmark,F_1193.txt,dms.directory_245_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1194_benchmark,F_1194.txt,dms.directory_221_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1195_benchmark,F_1195.txt,dms.directory_398_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1196_benchmark,F_1196.txt,dms.directory_172_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1197_benchmark,F_1197.txt,dms.directory_323_benchmark,dms.category_019_benchmark,dms.tag_105_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1198_benchmark,F_1198.txt,dms.directory_275_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1199_benchmark,F_1199.txt,dms.directory_365_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1200_benchmark,F_1200.txt,dms.directory_040_benchmark,dms.category_031_benchmark,dms.tag_116_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1201_benchmark,F_1201.txt,dms.directory_232_benchmark,dms.category_049_benchmark,dms.tag_093_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1202_benchmark,F_1202.txt,dms.directory_315_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1203_benchmark,F_1203.txt,dms.directory_033_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1204_benchmark,F_1204.txt,dms.directory_271_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1205_benchmark,F_1205.txt,dms.directory_262_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1206_benchmark,F_1206.txt,dms.directory_061_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1207_benchmark,F_1207.txt,dms.directory_185_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1208_benchmark,F_1208.txt,dms.directory_148_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1209_benchmark,F_1209.txt,dms.directory_395_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1210_benchmark,F_1210.txt,dms.directory_208_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1211_benchmark,F_1211.txt,dms.directory_173_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1212_benchmark,F_1212.txt,dms.directory_453_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1213_benchmark,F_1213.txt,dms.directory_063_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1214_benchmark,F_1214.txt,dms.directory_308_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1215_benchmark,F_1215.txt,dms.directory_015_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1216_benchmark,F_1216.txt,dms.directory_313_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1217_benchmark,F_1217.txt,dms.directory_268_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1218_benchmark,F_1218.txt,dms.directory_253_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1219_benchmark,F_1219.txt,dms.directory_378_benchmark,dms.category_034_benchmark,dms.tag_047_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1220_benchmark,F_1220.txt,dms.directory_278_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1221_benchmark,F_1221.txt,dms.directory_361_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1222_benchmark,F_1222.txt,dms.directory_234_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1223_benchmark,F_1223.txt,dms.directory_283_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1224_benchmark,F_1224.txt,dms.directory_126_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1225_benchmark,F_1225.txt,dms.directory_271_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1226_benchmark,F_1226.txt,dms.directory_354_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1227_benchmark,F_1227.txt,dms.directory_118_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1228_benchmark,F_1228.txt,dms.directory_325_benchmark,dms.category_012_benchmark,dms.tag_098_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1229_benchmark,F_1229.txt,dms.directory_250_benchmark,dms.category_006_benchmark,dms.tag_041_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1230_benchmark,F_1230.txt,dms.directory_159_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1231_benchmark,F_1231.txt,dms.directory_216_benchmark,,dms.tag_065_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1232_benchmark,F_1232.txt,dms.directory_168_benchmark,,dms.tag_119_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1233_benchmark,F_1233.txt,dms.directory_026_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1234_benchmark,F_1234.txt,dms.directory_436_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1235_benchmark,F_1235.txt,dms.directory_296_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1236_benchmark,F_1236.txt,dms.directory_113_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1237_benchmark,F_1237.txt,dms.directory_278_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1238_benchmark,F_1238.txt,dms.directory_070_benchmark,dms.category_021_benchmark,dms.tag_140_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1239_benchmark,F_1239.txt,dms.directory_058_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1240_benchmark,F_1240.txt,dms.directory_190_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1241_benchmark,F_1241.txt,dms.directory_204_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1242_benchmark,F_1242.txt,dms.directory_278_benchmark,,dms.tag_032_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1243_benchmark,F_1243.txt,dms.directory_478_benchmark,,dms.tag_127_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1244_benchmark,F_1244.txt,dms.directory_458_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1245_benchmark,F_1245.txt,dms.directory_140_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1246_benchmark,F_1246.txt,dms.directory_037_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1247_benchmark,F_1247.txt,dms.directory_411_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1248_benchmark,F_1248.txt,dms.directory_293_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1249_benchmark,F_1249.txt,dms.directory_077_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1250_benchmark,F_1250.txt,dms.directory_342_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1251_benchmark,F_1251.txt,dms.directory_310_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1252_benchmark,F_1252.txt,dms.directory_093_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1253_benchmark,F_1253.txt,dms.directory_337_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1254_benchmark,F_1254.txt,dms.directory_415_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1255_benchmark,F_1255.txt,dms.directory_223_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1256_benchmark,F_1256.txt,dms.directory_473_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1257_benchmark,F_1257.txt,dms.directory_382_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1258_benchmark,F_1258.txt,dms.directory_057_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1259_benchmark,F_1259.txt,dms.directory_450_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1260_benchmark,F_1260.txt,dms.directory_178_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1261_benchmark,F_1261.txt,dms.directory_476_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1262_benchmark,F_1262.txt,dms.directory_219_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1263_benchmark,F_1263.txt,dms.directory_345_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1264_benchmark,F_1264.txt,dms.directory_278_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1265_benchmark,F_1265.txt,dms.directory_001_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1266_benchmark,F_1266.txt,dms.directory_222_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1267_benchmark,F_1267.txt,dms.directory_120_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1268_benchmark,F_1268.txt,dms.directory_411_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1269_benchmark,F_1269.txt,dms.directory_386_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1270_benchmark,F_1270.txt,dms.directory_299_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1271_benchmark,F_1271.txt,dms.directory_335_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1272_benchmark,F_1272.txt,dms.directory_019_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1273_benchmark,F_1273.txt,dms.directory_055_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1274_benchmark,F_1274.txt,dms.directory_483_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1275_benchmark,F_1275.txt,dms.directory_033_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1276_benchmark,F_1276.txt,dms.directory_439_benchmark,dms.category_019_benchmark,dms.tag_081_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1277_benchmark,F_1277.txt,dms.directory_473_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1278_benchmark,F_1278.txt,dms.directory_397_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1279_benchmark,F_1279.txt,dms.directory_002_benchmark,,dms.tag_010_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1280_benchmark,F_1280.txt,dms.directory_382_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1281_benchmark,F_1281.txt,dms.directory_386_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1282_benchmark,F_1282.txt,dms.directory_387_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1283_benchmark,F_1283.txt,dms.directory_148_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1284_benchmark,F_1284.txt,dms.directory_414_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1285_benchmark,F_1285.txt,dms.directory_337_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1286_benchmark,F_1286.txt,dms.directory_005_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1287_benchmark,F_1287.txt,dms.directory_310_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1288_benchmark,F_1288.txt,dms.directory_204_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1289_benchmark,F_1289.txt,dms.directory_370_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1290_benchmark,F_1290.txt,dms.directory_216_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1291_benchmark,F_1291.txt,dms.directory_379_benchmark,,dms.tag_013_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1292_benchmark,F_1292.txt,dms.directory_187_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1293_benchmark,F_1293.txt,dms.directory_276_benchmark,dms.category_018_benchmark,dms.tag_083_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1294_benchmark,F_1294.txt,dms.directory_498_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1295_benchmark,F_1295.txt,dms.directory_287_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1296_benchmark,F_1296.txt,dms.directory_086_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1297_benchmark,F_1297.txt,dms.directory_324_benchmark,,dms.tag_012_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1298_benchmark,F_1298.txt,dms.directory_218_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1299_benchmark,F_1299.txt,dms.directory_097_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1300_benchmark,F_1300.txt,dms.directory_494_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1301_benchmark,F_1301.txt,dms.directory_274_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1302_benchmark,F_1302.txt,dms.directory_206_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1303_benchmark,F_1303.txt,dms.directory_251_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1304_benchmark,F_1304.txt,dms.directory_068_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1305_benchmark,F_1305.txt,dms.directory_313_benchmark,dms.category_040_benchmark,dms.tag_054_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1306_benchmark,F_1306.txt,dms.directory_099_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1307_benchmark,F_1307.txt,dms.directory_164_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1308_benchmark,F_1308.txt,dms.directory_194_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1309_benchmark,F_1309.txt,dms.directory_185_benchmark,dms.category_035_benchmark,dms.tag_101_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1310_benchmark,F_1310.txt,dms.directory_007_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1311_benchmark,F_1311.txt,dms.directory_337_benchmark,dms.category_003_benchmark,dms.tag_106_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1312_benchmark,F_1312.txt,dms.directory_276_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1313_benchmark,F_1313.txt,dms.directory_074_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1314_benchmark,F_1314.txt,dms.directory_305_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1315_benchmark,F_1315.txt,dms.directory_300_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1316_benchmark,F_1316.txt,dms.directory_358_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1317_benchmark,F_1317.txt,dms.directory_102_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1318_benchmark,F_1318.txt,dms.directory_018_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1319_benchmark,F_1319.txt,dms.directory_370_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1320_benchmark,F_1320.txt,dms.directory_408_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1321_benchmark,F_1321.txt,dms.directory_242_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1322_benchmark,F_1322.txt,dms.directory_243_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1323_benchmark,F_1323.txt,dms.directory_323_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1324_benchmark,F_1324.txt,dms.directory_011_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1325_benchmark,F_1325.txt,dms.directory_316_benchmark,dms.category_050_benchmark,dms.tag_050_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1326_benchmark,F_1326.txt,dms.directory_159_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1327_benchmark,F_1327.txt,dms.directory_135_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1328_benchmark,F_1328.txt,dms.directory_310_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1329_benchmark,F_1329.txt,dms.directory_413_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1330_benchmark,F_1330.txt,dms.directory_045_benchmark,dms.category_020_benchmark,dms.tag_141_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1331_benchmark,F_1331.txt,dms.directory_468_benchmark,,dms.tag_096_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1332_benchmark,F_1332.txt,dms.directory_033_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1333_benchmark,F_1333.txt,dms.directory_354_benchmark,dms.category_034_benchmark,dms.tag_033_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1334_benchmark,F_1334.txt,dms.directory_420_benchmark,dms.category_016_benchmark,dms.tag_147_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1335_benchmark,F_1335.txt,dms.directory_152_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1336_benchmark,F_1336.txt,dms.directory_319_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1337_benchmark,F_1337.txt,dms.directory_027_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1338_benchmark,F_1338.txt,dms.directory_241_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1339_benchmark,F_1339.txt,dms.directory_465_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1340_benchmark,F_1340.txt,dms.directory_146_benchmark,,dms.tag_060_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1341_benchmark,F_1341.txt,dms.directory_243_benchmark,dms.category_015_benchmark,dms.tag_089_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1342_benchmark,F_1342.txt,dms.directory_356_benchmark,dms.category_017_benchmark,dms.tag_017_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1343_benchmark,F_1343.txt,dms.directory_148_benchmark,,dms.tag_037_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1344_benchmark,F_1344.txt,dms.directory_145_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1345_benchmark,F_1345.txt,dms.directory_116_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1346_benchmark,F_1346.txt,dms.directory_454_benchmark,dms.category_007_benchmark,dms.tag_067_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1347_benchmark,F_1347.txt,dms.directory_298_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1348_benchmark,F_1348.txt,dms.directory_360_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1349_benchmark,F_1349.txt,dms.directory_239_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1350_benchmark,F_1350.txt,dms.directory_210_benchmark,dms.category_049_benchmark,dms.tag_040_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1351_benchmark,F_1351.txt,dms.directory_054_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1352_benchmark,F_1352.txt,dms.directory_448_benchmark,,dms.tag_094_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1353_benchmark,F_1353.txt,dms.directory_059_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1354_benchmark,F_1354.txt,dms.directory_327_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1355_benchmark,F_1355.txt,dms.directory_182_benchmark,,dms.tag_104_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1356_benchmark,F_1356.txt,dms.directory_294_benchmark,dms.category_024_benchmark,dms.tag_049_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1357_benchmark,F_1357.txt,dms.directory_460_benchmark,dms.category_050_benchmark,dms.tag_110_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1358_benchmark,F_1358.txt,dms.directory_389_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1359_benchmark,F_1359.txt,dms.directory_365_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1360_benchmark,F_1360.txt,dms.directory_373_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1361_benchmark,F_1361.txt,dms.directory_447_benchmark,,dms.tag_044_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1362_benchmark,F_1362.txt,dms.directory_398_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1363_benchmark,F_1363.txt,dms.directory_416_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1364_benchmark,F_1364.txt,dms.directory_037_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1365_benchmark,F_1365.txt,dms.directory_467_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1366_benchmark,F_1366.txt,dms.directory_467_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1367_benchmark,F_1367.txt,dms.directory_475_benchmark,dms.category_001_benchmark,dms.tag_099_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1368_benchmark,F_1368.txt,dms.directory_037_benchmark,,dms.tag_108_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1369_benchmark,F_1369.txt,dms.directory_070_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1370_benchmark,F_1370.txt,dms.directory_222_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1371_benchmark,F_1371.txt,dms.directory_105_benchmark,dms.category_022_benchmark,dms.tag_073_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1372_benchmark,F_1372.txt,dms.directory_018_benchmark,dms.category_004_benchmark,dms.tag_135_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1373_benchmark,F_1373.txt,dms.directory_334_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1374_benchmark,F_1374.txt,dms.directory_445_benchmark,dms.category_007_benchmark,dms.tag_118_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1375_benchmark,F_1375.txt,dms.directory_349_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1376_benchmark,F_1376.txt,dms.directory_171_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1377_benchmark,F_1377.txt,dms.directory_268_benchmark,dms.category_044_benchmark,dms.tag_095_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1378_benchmark,F_1378.txt,dms.directory_126_benchmark,dms.category_038_benchmark,dms.tag_092_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1379_benchmark,F_1379.txt,dms.directory_066_benchmark,dms.category_034_benchmark,dms.tag_109_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1380_benchmark,F_1380.txt,dms.directory_258_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1381_benchmark,F_1381.txt,dms.directory_245_benchmark,dms.category_003_benchmark,dms.tag_076_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1382_benchmark,F_1382.txt,dms.directory_299_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1383_benchmark,F_1383.txt,dms.directory_281_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1384_benchmark,F_1384.txt,dms.directory_071_benchmark,dms.category_039_benchmark,dms.tag_003_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1385_benchmark,F_1385.txt,dms.directory_196_benchmark,dms.category_050_benchmark,dms.tag_029_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1386_benchmark,F_1386.txt,dms.directory_447_benchmark,dms.category_003_benchmark,dms.tag_145_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1387_benchmark,F_1387.txt,dms.directory_432_benchmark,dms.category_015_benchmark,dms.tag_002_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1388_benchmark,F_1388.txt,dms.directory_281_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1389_benchmark,F_1389.txt,dms.directory_456_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1390_benchmark,F_1390.txt,dms.directory_132_benchmark,dms.category_013_benchmark,dms.tag_031_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1391_benchmark,F_1391.txt,dms.directory_120_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1392_benchmark,F_1392.txt,dms.directory_254_benchmark,dms.category_029_benchmark,dms.tag_005_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1393_benchmark,F_1393.txt,dms.directory_312_benchmark,dms.category_046_benchmark,dms.tag_022_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1394_benchmark,F_1394.txt,dms.directory_278_benchmark,dms.category_034_benchmark,dms.tag_142_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1395_benchmark,F_1395.txt,dms.directory_477_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1396_benchmark,F_1396.txt,dms.directory_131_benchmark,,dms.tag_132_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1397_benchmark,F_1397.txt,dms.directory_272_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1398_benchmark,F_1398.txt,dms.directory_257_benchmark,dms.category_014_benchmark,dms.tag_059_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1399_benchmark,F_1399.txt,dms.directory_468_benchmark,dms.category_015_benchmark,dms.tag_120_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1400_benchmark,F_1400.txt,dms.directory_102_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1401_benchmark,F_1401.txt,dms.directory_064_benchmark,dms.category_005_benchmark,dms.tag_014_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1402_benchmark,F_1402.txt,dms.directory_036_benchmark,dms.category_040_benchmark,dms.tag_072_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1403_benchmark,F_1403.txt,dms.directory_079_benchmark,dms.category_020_benchmark,dms.tag_129_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1404_benchmark,F_1404.txt,dms.directory_013_benchmark,dms.category_001_benchmark,dms.tag_122_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1405_benchmark,F_1405.txt,dms.directory_241_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1406_benchmark,F_1406.txt,dms.directory_452_benchmark,dms.category_039_benchmark,dms.tag_128_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1407_benchmark,F_1407.txt,dms.directory_374_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1408_benchmark,F_1408.txt,dms.directory_296_benchmark,dms.category_027_benchmark,dms.tag_001_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1409_benchmark,F_1409.txt,dms.directory_136_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1410_benchmark,F_1410.txt,dms.directory_475_benchmark,dms.category_025_benchmark,dms.tag_097_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1411_benchmark,F_1411.txt,dms.directory_071_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1412_benchmark,F_1412.txt,dms.directory_201_benchmark,dms.category_014_benchmark,dms.tag_149_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1413_benchmark,F_1413.txt,dms.directory_386_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1414_benchmark,F_1414.txt,dms.directory_407_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1415_benchmark,F_1415.txt,dms.directory_335_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1416_benchmark,F_1416.txt,dms.directory_310_benchmark,dms.category_039_benchmark,dms.tag_146_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1417_benchmark,F_1417.txt,dms.directory_313_benchmark,dms.category_023_benchmark,dms.tag_038_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1418_benchmark,F_1418.txt,dms.directory_180_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1419_benchmark,F_1419.txt,dms.directory_322_benchmark,dms.category_026_benchmark,dms.tag_027_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1420_benchmark,F_1420.txt,dms.directory_178_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1421_benchmark,F_1421.txt,dms.directory_467_benchmark,dms.category_014_benchmark,dms.tag_078_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1422_benchmark,F_1422.txt,dms.directory_321_benchmark,dms.category_022_benchmark,dms.tag_061_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1423_benchmark,F_1423.txt,dms.directory_489_benchmark,,dms.tag_006_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1424_benchmark,F_1424.txt,dms.directory_270_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1425_benchmark,F_1425.txt,dms.directory_228_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1426_benchmark,F_1426.txt,dms.directory_400_benchmark,dms.category_012_benchmark,dms.tag_023_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1427_benchmark,F_1427.txt,dms.directory_237_benchmark,dms.category_043_benchmark,dms.tag_079_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1428_benchmark,F_1428.txt,dms.directory_020_benchmark,dms.category_016_benchmark,dms.tag_100_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1429_benchmark,F_1429.txt,dms.directory_395_benchmark,dms.category_011_benchmark,dms.tag_021_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1430_benchmark,F_1430.txt,dms.directory_160_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1431_benchmark,F_1431.txt,dms.directory_372_benchmark,dms.category_011_benchmark,dms.tag_080_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1432_benchmark,F_1432.txt,dms.directory_200_benchmark,dms.category_001_benchmark,dms.tag_051_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1433_benchmark,F_1433.txt,dms.directory_122_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1434_benchmark,F_1434.txt,dms.directory_374_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1435_benchmark,F_1435.txt,dms.directory_173_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1436_benchmark,F_1436.txt,dms.directory_412_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1437_benchmark,F_1437.txt,dms.directory_204_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1438_benchmark,F_1438.txt,dms.directory_347_benchmark,dms.category_025_benchmark,dms.tag_112_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1439_benchmark,F_1439.txt,dms.directory_030_benchmark,dms.category_017_benchmark,dms.tag_011_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1440_benchmark,F_1440.txt,dms.directory_347_benchmark,,dms.tag_134_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1441_benchmark,F_1441.txt,dms.directory_103_benchmark,dms.category_037_benchmark,dms.tag_088_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1442_benchmark,F_1442.txt,dms.directory_295_benchmark,dms.category_021_benchmark,dms.tag_026_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1443_benchmark,F_1443.txt,dms.directory_381_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1444_benchmark,F_1444.txt,dms.directory_151_benchmark,dms.category_012_benchmark,dms.tag_057_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1445_benchmark,F_1445.txt,dms.directory_136_benchmark,dms.category_041_benchmark,dms.tag_087_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1446_benchmark,F_1446.txt,dms.directory_059_benchmark,,dms.tag_009_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1447_benchmark,F_1447.txt,dms.directory_216_benchmark,dms.category_043_benchmark,dms.tag_138_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1448_benchmark,F_1448.txt,dms.directory_182_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1449_benchmark,F_1449.txt,dms.directory_442_benchmark,,dms.tag_015_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1450_benchmark,F_1450.txt,dms.directory_258_benchmark,dms.category_025_benchmark,dms.tag_028_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1451_benchmark,F_1451.txt,dms.directory_272_benchmark,dms.category_032_benchmark,dms.tag_064_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1452_benchmark,F_1452.txt,dms.directory_326_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1453_benchmark,F_1453.txt,dms.directory_147_benchmark,dms.category_040_benchmark,dms.tag_024_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1454_benchmark,F_1454.txt,dms.directory_377_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1455_benchmark,F_1455.txt,dms.directory_464_benchmark,dms.category_046_benchmark,dms.tag_062_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1456_benchmark,F_1456.txt,dms.directory_425_benchmark,dms.category_028_benchmark,dms.tag_052_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1457_benchmark,F_1457.txt,dms.directory_361_benchmark,dms.category_043_benchmark,dms.tag_139_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1458_benchmark,F_1458.txt,dms.directory_394_benchmark,dms.category_033_benchmark,dms.tag_039_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1459_benchmark,F_1459.txt,dms.directory_133_benchmark,,dms.tag_046_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1460_benchmark,F_1460.txt,dms.directory_334_benchmark,,dms.tag_016_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1461_benchmark,F_1461.txt,dms.directory_341_benchmark,dms.category_050_benchmark,dms.tag_117_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1462_benchmark,F_1462.txt,dms.directory_179_benchmark,dms.category_027_benchmark,dms.tag_048_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1463_benchmark,F_1463.txt,dms.directory_352_benchmark,dms.category_021_benchmark,dms.tag_136_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1464_benchmark,F_1464.txt,dms.directory_231_benchmark,dms.category_040_benchmark,dms.tag_126_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1465_benchmark,F_1465.txt,dms.directory_226_benchmark,dms.category_008_benchmark,dms.tag_077_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1466_benchmark,F_1466.txt,dms.directory_216_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1467_benchmark,F_1467.txt,dms.directory_061_benchmark,dms.category_041_benchmark,dms.tag_115_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1468_benchmark,F_1468.txt,dms.directory_298_benchmark,dms.category_015_benchmark,dms.tag_056_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1469_benchmark,F_1469.txt,dms.directory_144_benchmark,dms.category_014_benchmark,dms.tag_103_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1470_benchmark,F_1470.txt,dms.directory_233_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1471_benchmark,F_1471.txt,dms.directory_325_benchmark,dms.category_023_benchmark,dms.tag_085_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1472_benchmark,F_1472.txt,dms.directory_394_benchmark,dms.category_049_benchmark,dms.tag_035_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1473_benchmark,F_1473.txt,dms.directory_362_benchmark,dms.category_019_benchmark,dms.tag_125_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1474_benchmark,F_1474.txt,dms.directory_363_benchmark,dms.category_018_benchmark,dms.tag_133_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1475_benchmark,F_1475.txt,dms.directory_131_benchmark,dms.category_011_benchmark,dms.tag_144_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1476_benchmark,F_1476.txt,dms.directory_478_benchmark,dms.category_018_benchmark,dms.tag_018_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1477_benchmark,F_1477.txt,dms.directory_184_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1478_benchmark,F_1478.txt,dms.directory_120_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1479_benchmark,F_1479.txt,dms.directory_139_benchmark,dms.category_031_benchmark,dms.tag_111_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1480_benchmark,F_1480.txt,dms.directory_042_benchmark,dms.category_013_benchmark,dms.tag_068_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1481_benchmark,F_1481.txt,dms.directory_296_benchmark,dms.category_041_benchmark,dms.tag_053_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1482_benchmark,F_1482.txt,dms.directory_043_benchmark,,dms.tag_123_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1483_benchmark,F_1483.txt,dms.directory_013_benchmark,,dms.tag_063_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1484_benchmark,F_1484.txt,dms.directory_025_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1485_benchmark,F_1485.txt,dms.directory_444_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1486_benchmark,F_1486.txt,dms.directory_085_benchmark,dms.category_024_benchmark,dms.tag_084_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1487_benchmark,F_1487.txt,dms.directory_427_benchmark,dms.category_014_benchmark,dms.tag_107_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1488_benchmark,F_1488.txt,dms.directory_136_benchmark,,dms.tag_090_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1489_benchmark,F_1489.txt,dms.directory_397_benchmark,dms.category_005_benchmark,dms.tag_058_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1490_benchmark,F_1490.txt,dms.directory_033_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1491_benchmark,F_1491.txt,dms.directory_130_benchmark,dms.category_022_benchmark,dms.tag_020_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1492_benchmark,F_1492.txt,dms.directory_247_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1493_benchmark,F_1493.txt,dms.directory_105_benchmark,dms.category_037_benchmark,dms.tag_030_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1494_benchmark,F_1494.txt,dms.directory_149_benchmark,dms.category_041_benchmark,dms.tag_036_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1495_benchmark,F_1495.txt,dms.directory_246_benchmark,dms.category_031_benchmark,dms.tag_114_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1496_benchmark,F_1496.txt,dms.directory_285_benchmark,dms.category_025_benchmark,dms.tag_082_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1497_benchmark,F_1497.txt,dms.directory_237_benchmark,dms.category_005_benchmark,dms.tag_121_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1498_benchmark,F_1498.txt,dms.directory_020_benchmark,,,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1499_benchmark,F_1499.txt,dms.directory_277_benchmark,,dms.tag_086_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== +dms.file_1500_benchmark,F_1500.txt,dms.directory_434_benchmark,dms.category_001_benchmark,dms.tag_143_benchmark,I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKHZvaWQpDQp7DQogICAgcHJpbnRmKCJoZWxsbywgd29ybGRcbiIpOw0KfQ== diff --git a/dms/tests/data/dms.storage.csv b/dms/tests/data/dms.storage.csv new file mode 100644 index 00000000..5db4c3e2 --- /dev/null +++ b/dms/tests/data/dms.storage.csv @@ -0,0 +1,3 @@ +id,name,save_type +dms.storage_001_benchmark,S_001,database +dms.storage_002_benchmark,S_002,database diff --git a/dms/tests/data/dms.tag.csv b/dms/tests/data/dms.tag.csv new file mode 100644 index 00000000..dc25364b --- /dev/null +++ b/dms/tests/data/dms.tag.csv @@ -0,0 +1,151 @@ +id,name,category_id/id +dms.tag_001_benchmark,T_001,dms.category_027_benchmark +dms.tag_002_benchmark,T_002,dms.category_015_benchmark +dms.tag_003_benchmark,T_003,dms.category_039_benchmark +dms.tag_004_benchmark,T_004, +dms.tag_005_benchmark,T_005,dms.category_029_benchmark +dms.tag_006_benchmark,T_006, +dms.tag_007_benchmark,T_007,dms.category_049_benchmark +dms.tag_008_benchmark,T_008,dms.category_015_benchmark +dms.tag_009_benchmark,T_009, +dms.tag_010_benchmark,T_010, +dms.tag_011_benchmark,T_011,dms.category_017_benchmark +dms.tag_012_benchmark,T_012, +dms.tag_013_benchmark,T_013, +dms.tag_014_benchmark,T_014,dms.category_005_benchmark +dms.tag_015_benchmark,T_015, +dms.tag_016_benchmark,T_016, +dms.tag_017_benchmark,T_017,dms.category_017_benchmark +dms.tag_018_benchmark,T_018,dms.category_018_benchmark +dms.tag_019_benchmark,T_019,dms.category_040_benchmark +dms.tag_020_benchmark,T_020,dms.category_022_benchmark +dms.tag_021_benchmark,T_021,dms.category_011_benchmark +dms.tag_022_benchmark,T_022,dms.category_046_benchmark +dms.tag_023_benchmark,T_023,dms.category_012_benchmark +dms.tag_024_benchmark,T_024,dms.category_040_benchmark +dms.tag_025_benchmark,T_025,dms.category_009_benchmark +dms.tag_026_benchmark,T_026,dms.category_021_benchmark +dms.tag_027_benchmark,T_027,dms.category_026_benchmark +dms.tag_028_benchmark,T_028,dms.category_025_benchmark +dms.tag_029_benchmark,T_029,dms.category_050_benchmark +dms.tag_030_benchmark,T_030,dms.category_037_benchmark +dms.tag_031_benchmark,T_031,dms.category_013_benchmark +dms.tag_032_benchmark,T_032, +dms.tag_033_benchmark,T_033,dms.category_034_benchmark +dms.tag_034_benchmark,T_034, +dms.tag_035_benchmark,T_035,dms.category_049_benchmark +dms.tag_036_benchmark,T_036,dms.category_041_benchmark +dms.tag_037_benchmark,T_037, +dms.tag_038_benchmark,T_038,dms.category_023_benchmark +dms.tag_039_benchmark,T_039,dms.category_033_benchmark +dms.tag_040_benchmark,T_040,dms.category_049_benchmark +dms.tag_041_benchmark,T_041,dms.category_006_benchmark +dms.tag_042_benchmark,T_042,dms.category_041_benchmark +dms.tag_043_benchmark,T_043,dms.category_040_benchmark +dms.tag_044_benchmark,T_044, +dms.tag_045_benchmark,T_045,dms.category_026_benchmark +dms.tag_046_benchmark,T_046, +dms.tag_047_benchmark,T_047,dms.category_034_benchmark +dms.tag_048_benchmark,T_048,dms.category_027_benchmark +dms.tag_049_benchmark,T_049,dms.category_024_benchmark +dms.tag_050_benchmark,T_050,dms.category_050_benchmark +dms.tag_051_benchmark,T_051,dms.category_001_benchmark +dms.tag_052_benchmark,T_052,dms.category_028_benchmark +dms.tag_053_benchmark,T_053,dms.category_041_benchmark +dms.tag_054_benchmark,T_054,dms.category_040_benchmark +dms.tag_055_benchmark,T_055,dms.category_019_benchmark +dms.tag_056_benchmark,T_056,dms.category_015_benchmark +dms.tag_057_benchmark,T_057,dms.category_012_benchmark +dms.tag_058_benchmark,T_058,dms.category_005_benchmark +dms.tag_059_benchmark,T_059,dms.category_014_benchmark +dms.tag_060_benchmark,T_060, +dms.tag_061_benchmark,T_061,dms.category_022_benchmark +dms.tag_062_benchmark,T_062,dms.category_046_benchmark +dms.tag_063_benchmark,T_063, +dms.tag_064_benchmark,T_064,dms.category_032_benchmark +dms.tag_065_benchmark,T_065, +dms.tag_066_benchmark,T_066,dms.category_017_benchmark +dms.tag_067_benchmark,T_067,dms.category_007_benchmark +dms.tag_068_benchmark,T_068,dms.category_013_benchmark +dms.tag_069_benchmark,T_069,dms.category_035_benchmark +dms.tag_070_benchmark,T_070, +dms.tag_071_benchmark,T_071,dms.category_049_benchmark +dms.tag_072_benchmark,T_072,dms.category_040_benchmark +dms.tag_073_benchmark,T_073,dms.category_022_benchmark +dms.tag_074_benchmark,T_074,dms.category_025_benchmark +dms.tag_075_benchmark,T_075, +dms.tag_076_benchmark,T_076,dms.category_003_benchmark +dms.tag_077_benchmark,T_077,dms.category_008_benchmark +dms.tag_078_benchmark,T_078,dms.category_014_benchmark +dms.tag_079_benchmark,T_079,dms.category_043_benchmark +dms.tag_080_benchmark,T_080,dms.category_011_benchmark +dms.tag_081_benchmark,T_081,dms.category_019_benchmark +dms.tag_082_benchmark,T_082,dms.category_025_benchmark +dms.tag_083_benchmark,T_083,dms.category_018_benchmark +dms.tag_084_benchmark,T_084,dms.category_024_benchmark +dms.tag_085_benchmark,T_085,dms.category_023_benchmark +dms.tag_086_benchmark,T_086, +dms.tag_087_benchmark,T_087,dms.category_041_benchmark +dms.tag_088_benchmark,T_088,dms.category_037_benchmark +dms.tag_089_benchmark,T_089,dms.category_015_benchmark +dms.tag_090_benchmark,T_090, +dms.tag_091_benchmark,T_091, +dms.tag_092_benchmark,T_092,dms.category_038_benchmark +dms.tag_093_benchmark,T_093,dms.category_049_benchmark +dms.tag_094_benchmark,T_094, +dms.tag_095_benchmark,T_095,dms.category_044_benchmark +dms.tag_096_benchmark,T_096, +dms.tag_097_benchmark,T_097,dms.category_025_benchmark +dms.tag_098_benchmark,T_098,dms.category_012_benchmark +dms.tag_099_benchmark,T_099,dms.category_001_benchmark +dms.tag_100_benchmark,T_100,dms.category_016_benchmark +dms.tag_101_benchmark,T_101,dms.category_035_benchmark +dms.tag_102_benchmark,T_102,dms.category_001_benchmark +dms.tag_103_benchmark,T_103,dms.category_014_benchmark +dms.tag_104_benchmark,T_104, +dms.tag_105_benchmark,T_105,dms.category_019_benchmark +dms.tag_106_benchmark,T_106,dms.category_003_benchmark +dms.tag_107_benchmark,T_107,dms.category_014_benchmark +dms.tag_108_benchmark,T_108, +dms.tag_109_benchmark,T_109,dms.category_034_benchmark +dms.tag_110_benchmark,T_110,dms.category_050_benchmark +dms.tag_111_benchmark,T_111,dms.category_031_benchmark +dms.tag_112_benchmark,T_112,dms.category_025_benchmark +dms.tag_113_benchmark,T_113,dms.category_033_benchmark +dms.tag_114_benchmark,T_114,dms.category_031_benchmark +dms.tag_115_benchmark,T_115,dms.category_041_benchmark +dms.tag_116_benchmark,T_116,dms.category_031_benchmark +dms.tag_117_benchmark,T_117,dms.category_050_benchmark +dms.tag_118_benchmark,T_118,dms.category_007_benchmark +dms.tag_119_benchmark,T_119, +dms.tag_120_benchmark,T_120,dms.category_015_benchmark +dms.tag_121_benchmark,T_121,dms.category_005_benchmark +dms.tag_122_benchmark,T_122,dms.category_001_benchmark +dms.tag_123_benchmark,T_123, +dms.tag_124_benchmark,T_124, +dms.tag_125_benchmark,T_125,dms.category_019_benchmark +dms.tag_126_benchmark,T_126,dms.category_040_benchmark +dms.tag_127_benchmark,T_127, +dms.tag_128_benchmark,T_128,dms.category_039_benchmark +dms.tag_129_benchmark,T_129,dms.category_020_benchmark +dms.tag_130_benchmark,T_130, +dms.tag_131_benchmark,T_131, +dms.tag_132_benchmark,T_132, +dms.tag_133_benchmark,T_133,dms.category_018_benchmark +dms.tag_134_benchmark,T_134, +dms.tag_135_benchmark,T_135,dms.category_004_benchmark +dms.tag_136_benchmark,T_136,dms.category_021_benchmark +dms.tag_137_benchmark,T_137, +dms.tag_138_benchmark,T_138,dms.category_043_benchmark +dms.tag_139_benchmark,T_139,dms.category_043_benchmark +dms.tag_140_benchmark,T_140,dms.category_021_benchmark +dms.tag_141_benchmark,T_141,dms.category_020_benchmark +dms.tag_142_benchmark,T_142,dms.category_034_benchmark +dms.tag_143_benchmark,T_143,dms.category_001_benchmark +dms.tag_144_benchmark,T_144,dms.category_011_benchmark +dms.tag_145_benchmark,T_145,dms.category_003_benchmark +dms.tag_146_benchmark,T_146,dms.category_039_benchmark +dms.tag_147_benchmark,T_147,dms.category_016_benchmark +dms.tag_148_benchmark,T_148,dms.category_040_benchmark +dms.tag_149_benchmark,T_149,dms.category_014_benchmark +dms.tag_150_benchmark,T_150,dms.category_013_benchmark diff --git a/dms/tests/data/mail01.eml b/dms/tests/data/mail01.eml new file mode 100644 index 00000000..2f4e8033 --- /dev/null +++ b/dms/tests/data/mail01.eml @@ -0,0 +1,170 @@ +Return-Path: <123@acm.org> +To: Manuel Lemos <directory+test@dmsTest.com> +Subject: Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message +From: mlemos <345@acm.org> +Reply-To: mlemos <456@acm.org> +Sender: mlemos@acm.org +X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail) +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf" +Message-ID: <20050430192829.0489.mlemos@dmsTest.com> +Date: Sat, 30 Apr 2005 19:28:29 -0300 + + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc" + + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f" + + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +This is an HTML message. Please use an HTML capable mail program to read +this message. + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +<html> +<head> +<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H= +TML message + + + + + + + +
+

Testing Manuel Lemos' MIME E-mail composing and sending PHP cla= +ss: HTML message

+
+

Hello Manuel,

+This message is just to let you know that the MIME E-mail message composing and sending PHP class is working as expected.

+

Here is an image embedded in a message as a separate part:

= +
+
Than= +k you,
+mlemos

+
+ + +--69c1683a3ee16ef7cf16edd700694a2f-- + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="logo.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="logo.gif" +Content-ID: + +R0lGODlhlgAjAPMJAAAAAAAA/y8vLz8/P19fX19f339/f4+Pj4+Pz7+/v/////////////////// +/////yH5BAEAAAkALAAAAACWACMAQwT+MMlJq7046827/2AoHYChGAChAkBylgKgKClFyEl6xDMg +qLFBj3C5uXKplVAxIOxkA8BhdFCpDlMK1urMTrZWbAV8tVS5YsxtxmZHBVOSCcW9zaXyNhslVcto +RBp5NQYxLAYGLi8oSwoJBlE+BiSNj5E/PDQsmy4pAJWQLAKJY5+hXhZ2dDYldFWtNSFPiXssXnZR +k5+1pjpBiDMJUXG/Jo7DI4eKfMSmxsJ9GAUB1NXW19jZ2tvc3d7f4OHi2AgZN5vom1kk6F7s6u/p +m3Ab7AOIiCxOyZuBIv8AOeTJIaYQjiR/kKTr5GQNE3pYSjCJ9mUXClRUsLxaZGciC0X+OlpoOuQo +ZKdNJnIoKfnxRUQh6FLG0iLxIoYnJd0JEKISJyAQDodp3EUDC48oDnUY7HFI3wEDRjzycQJVZCQT +Ol7NK+G0qgtkAcOKHUu2rNmzYTVqRMt2bB49bHompSchqg6HcGeANSMxr8sEa2y2HexnSEUTuWri +SSbkYh7BgGVAnhB1b2REibESYaRoBgqIMYx59tFM9AvQffVG49P5NMZkMlHKhJPJb0knmSKZ6kSX +JtbeF3Am7ocok6c7cM7pU5xcXiJJETUz16qPrzEfaFgZpvzn7h86YV5r/1mxXeAUMVyEIpnVUGpN +RlG2ka9b3lP3pm2l6u7P+l/YLj3+RlEHbz1C0kRxSITQaAcilVBMEzmkkEQO8oSOBNg9SN+AX6hV +z1pjgJiAhwCRsY8ZIp6xj1ruqCgeGeKNGEZwLnIwzTg45qjjjjz2GEA5hAUp5JBEFmnkkSCoWEcZ +X8yohZNK1pFGPQS4hx0qNSLJlk9wCQORYu5QiMd7bUzGVyNlRiOHSlpuKdGEItHQ3HZ18beRRyws +YSY/waDTiHf/tWlWUBAJiMJ1/Z0XXU7N0FnREpKM4NChCgbyRDq9XYpOplaKopN9NMkDnBbG+UMC +QwLWIeaiglES6AjGARcPHCWoVAiatcTnGTABZoLPaPG1phccPv366mEvWEFSLnj+2QaonECwcJt/ +e1Zw3lJvVMmftBdVNQS3UngLCA85YHIQOy6JO9N4eZW7KJwtOUZmGwOMWqejwVW6RQzaikRHX3yI +osKhDAq8wmnKSmdMwNidSOof9ZG2DoV0RfTVmLFtGmNk+CoZna0HQnPHS3AhRbIeDpqmR09E0bsu +soeaw994z+rwQVInvqLenBftYjLOVphLFHhV9qsnez8AEUbQRgO737AxChjmyANxuEFHSGi7hFCV +4jxLst2N8sRJYU+SHiAKjlmCgz2IffbLI5aaQR71hnkxq1ZfHSfKata6YDCJDMAQwY7wOgzhjxgj +VFQnKB5uX4mr9qJ79pann+VcfcSzsSCd2mw5scqRRvlQ6TgcUelYhu75iPE4JejrsJOFQAG01277 +7bjnrvvuvPfu++/ABy887hfc6OPxyCevPDdAVoDA89BHL/301Fdv/fXYZ6/99tx3Pz0FEQAAOw== + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="background.gif" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="background.gif" +Content-ID: <4c837ed463ad29c820668e835a270e8a.gif> + +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 +eZmYmZmauZmc2ZlCEQEAOw== + +--6a82fb459dcaacd40ab3404529e808dc-- + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: text/plain; name="attachment.txt" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="attachment.txt" + +VGhpcyBpcyBqdXN0IGEgcGxhaW4gdGV4dCBhdHRhY2htZW50IGZpbGUgbmFtZWQgYXR0YWNobWVu +dC50eHQgLg== + +--652b8c4dcb00cdcdda1e16af36781caf-- diff --git a/dms/tests/data/mail02.eml b/dms/tests/data/mail02.eml new file mode 100644 index 00000000..bb07b14f --- /dev/null +++ b/dms/tests/data/mail02.eml @@ -0,0 +1,44 @@ +MIME-Version: 1.0 +Received: by 10.220.191.194 with HTTP; Wed, 11 May 2011 12:27:12 -0700 (PDT) +Date: Wed, 11 May 2011 13:27:12 -0600 +Delivered-To: jncjkq@dmsTest.com +Message-ID: +Subject: Test +From: Bill Jncjkq +To: directory+test@dmsTest.com +Content-Type: multipart/mixed; boundary=bcaec54eecc63acce904a3050f79 + +--bcaec54eecc63acce904a3050f79 +Content-Type: multipart/alternative; boundary=bcaec54eecc63acce604a3050f77 + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/plain; charset=ISO-8859-1 + +-- +Bill Jncjkq + +--bcaec54eecc63acce604a3050f77 +Content-Type: text/html; charset=ISO-8859-1 + +
--
Bill Jncjkq
+ +--bcaec54eecc63acce604a3050f77-- +--bcaec54eecc63acce904a3050f79 +Content-Type: text/html; charset=US-ASCII; name="bookmarks-really-short.html" +Content-Disposition: attachment; filename="bookmarks-really-short.html" +Content-Transfer-Encoding: base64 +X-Attachment-Id: f_gnknv6u70 + +PCFET0NUWVBFIE5FVFNDQVBFLUJvb2ttYXJrLWZpbGUtMT4KCTxIVE1MPgoJPE1FVEEgSFRUUC1F +UVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoJ +PFRpdGxlPkJvb2ttYXJrczwvVGl0bGU+Cgk8SDE+Qm9va21hcmtzPC9IMT4KCQk8RFQ+PEgzIEZP +TERFRD5UZWNoIE5ld3M8L0gzPgoJCTxETD48cD4KCQkJPERUPjxBIEhSRUY9Imh0dHA6Ly93d3cu +Y25ldC5jb20vIj5DTmV0PC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53aXJlZC5jb20v +Ij5XaXJlZCBOZXdzPC9BPgoJCTwvREw+PHA+CgkJPERUPjxIMyBGT0xERUQ+VG9vbHMgYW5kIFJl +ZmVyZW5jZTwvSDM+CgkJPERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy5tb25zdGVy +LmNvbS8iPk1vbnN0ZXIuY29tPC9BPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL3d3dy53ZWJtZC5j +b20vIj5XZWJNRDwvQT4KCQk8L0RMPjxwPgoJCTxEVD48SDMgRk9MREVEPlRyYXZlbDwvSDM+CgkJ +PERMPjxwPgoJCQk8RFQ+PEEgSFJFRj0iaHR0cDovL2ZvZG9ycy5jb20vIj5Gb2RvcnM8L0E+CgkJ +CTxEVD48QSBIUkVGPSJodHRwOi8vd3d3LnRyYXZlbG9jaXR5LmNvbS8iPlRyYXZlbG9jaXR5PC9B +PgoJCTwvREw+PHA+Cgk8L0RMPjxwPgo8L0hUTUw+ +--bcaec54eecc63acce904a3050f79-- diff --git a/dms/tests/test_benchmark.py b/dms/tests/test_benchmark.py new file mode 100644 index 00000000..1a85e4ed --- /dev/null +++ b/dms/tests/test_benchmark.py @@ -0,0 +1,391 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import cProfile +import logging +import os +import unittest +import warnings +from functools import wraps + +from odoo.tests import common, tagged +from odoo.tools import convert_file + +from .common import track_function + +_logger = logging.getLogger(__name__) + + +class profile: + def __init__(self, fname=None): + warnings.warn("Since 16.0.", DeprecationWarning, stacklevel=2) + self.fname = fname + + def __call__(self, f): + @wraps(f) + def wrapper(*args, **kwargs): + profile = cProfile.Profile() + result = profile.runcall(f, *args, **kwargs) + profile.dump_stats(self.fname or (f"{f.__name__}.cprof")) + return result + + return wrapper + + +# This tests will only be executed if --test-tags benchmark is defined +@tagged("-standard", "benchmark") +class BenchmarkTestCase(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._clean_existing_records() + cls._setup_benchmark_data() + + @classmethod + def _clean_existing_records(cls): + cls.env["dms.category"].search([]).sudo().unlink() + cls.env["dms.directory"].search([]).sudo().unlink() + cls.env["dms.storage"].search([]).sudo().unlink() + cls.env["dms.tag"].search([]).sudo().unlink() + + @classmethod + def _load(cls, module, *args): + path = str(os.path.join(module, *args)) + convert_file(cls.env, "dms", args[-1], {}, "init", False, "test", path) + + @classmethod + def _setup_benchmark_data(cls): + cls._load("dms", "tests", "data", "dms.category.csv") + cls._load("dms", "tests", "data", "dms.storage.csv") + cls._load("dms", "tests", "data", "dms.tag.csv") + cls._load("dms", "tests", "data", "dms.directory.csv") + cls._load("dms", "tests", "data", "dms.file.csv") + + def _benchmark_table(self, data): + columns = len(data[0]) - 1 + formt = "{:7}" + "| {:28}" * columns + + result = formt.format(*data[0]) + "\n" + result += ("-" * 7) + (("+" + "-" * 29) * columns) + "\n" + for row in data[1:]: + result += formt.format(*row) + "\n" + return result + + def _benchmark_function(self, func, args_list): + tfunc = track_function(return_tracking=True)(func) + benchmark = [] + for item in args_list: + self.registry.clear_all_caches() + args = item[0] if len(item) > 0 else [] + kwargs = item[1] if len(item) > 1 else {} + tracking = tuple(tfunc(*args, **kwargs)[1][1:]) + # pylint: disable=too-few-format-args + # pyupgrade: disable=UP030 + benchmark.append("{}sq {:.3f}s {:.3f}s {:.3f}s".format(*tracking)) + return benchmark + + # ---------------------------------------------------------- + # File + # ---------------------------------------------------------- + + def _file_kanban_fields(self): + return [ + "id", + "tag_ids", + "name", + "color", + "active", + "mimetype", + "create_uid", + "write_date", + "locked_by", + "is_locked", + "is_lock_editor", + "permission_write", + "permission_unlink", + ] + + def test_file_search_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.file"].with_context(bin_size=True) + args = [ + [[[]], {"limit": 1}], + [[[]], {"limit": 80}], + [[[]], {"limit": 500}], + [[[]]], + ] + + benchmark_data_super = ["Super"] + self._benchmark_function( + model.sudo().search, args + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + model.with_user(admin_uid).search, args + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + model.with_user(demo_uid).search, args + ) + + info_message = "\n\nSearching files with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_search_read_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.file"].with_context(bin_size=True) + args = [[[], {"limit": 1}], [[], {"limit": 80}], [[], {"limit": 500}], [[]]] + + benchmark_data_super = ["Super"] + self._benchmark_function( + model.sudo().search_read, args + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + model.with_user(admin_uid).search_read, args + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + model.with_user(demo_uid).search_read, args + ) + + info_message = "\n\nSearching and reading all fields with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_search_name_get_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.file"].with_context(bin_size=True) + + def test_function(model, limit): + return model.search([], limit=limit).mapped("display_name") + + model_super = model.sudo() + model_admin = model.with_user(admin_uid) + model_demo = model.with_user(demo_uid) + args_super = [ + [[model_super, 1]], + [[model_super, 800]], + [[model_super, 500]], + [[model_super, None]], + ] + args_admin = [ + [[model_admin, 1]], + [[model_admin, 800]], + [[model_admin, 500]], + [[model_admin, None]], + ] + args_demo = [ + [[model_demo, 1]], + [[model_demo, 800]], + [[model_demo, 500]], + [[model_demo, None]], + ] + + benchmark_data_super = ["Super"] + self._benchmark_function( + test_function, args_super + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + test_function, args_admin + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + test_function, args_demo + ) + + info_message = ( + "\n\nSearching and 'display_name' function with bin_size = True | " + ) + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_file_kanban_backend_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.file"].with_context(bin_size=True) + kanban_fields = self._file_kanban_fields() + + def test_function(model, kanban_fields, limit=80): + model.search_panel_select_range("directory_id") + model.search_panel_select_multi_range("directory_id") + model.search_panel_select_multi_range("tag_ids") + model.search_read(fields=kanban_fields, limit=limit) + + def function_args(args, kwargs): + return [[args, {"limit": arg}] for arg in kwargs] + + args_super = function_args([model.sudo(), kanban_fields], [1, 80, 500, None]) + args_admin = function_args( + [model.with_user(admin_uid), kanban_fields], [1, 80, 500, None] + ) + args_demo = function_args( + [model.with_user(demo_uid), kanban_fields], [1, 80, 500, None] + ) + + benchmark_data_super = ["Super"] + self._benchmark_function( + test_function, args_super + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + test_function, args_admin + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + test_function, args_demo + ) + + info_message = "\n\nSimulate kanban view loading on the backend | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time || " + info_message += "500 Directories | 150 Tags | 50 Categories\n" + _logger.info(info_message) + + # ---------------------------------------------------------- + # Directory + # ---------------------------------------------------------- + + def test_directory_search_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.directory"].with_context(bin_size=True) + args = [ + [[[]], {"limit": 1}], + [[[]], {"limit": 80}], + [[[]], {"limit": 500}], + [[[]]], + ] + + benchmark_data_super = ["Super"] + self._benchmark_function( + model.sudo().search, args + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + model.with_user(admin_uid).search, args + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + model.with_user(demo_uid).search, args + ) + + info_message = "\n\nSearching directories with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + def test_directory_search_read_benchmark(self): + demo_uid = self.browse_ref("base.user_demo").id + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.directory"].with_context(bin_size=True) + args = [[[], {"limit": 1}], [[], {"limit": 80}], [[], {"limit": 500}], [[]]] + + benchmark_data_super = ["Super"] + self._benchmark_function( + model.sudo().search_read, args + ) + benchmark_data_admin = ["Admin"] + self._benchmark_function( + model.with_user(admin_uid).search_read, args + ) + benchmark_data_demo = ["Demo"] + self._benchmark_function( + model.with_user(demo_uid).search_read, args + ) + + info_message = "\n\nSearching and reading all fields with bin_size = True | " + info_message += "Benchmark with Limit 1 / 80 / 500 / None (1500)\n\n" + info_message += self._benchmark_table( + [ + [ + "User", + "Search Limit 1", + "Search Limit 80", + "Search Limit 500", + "Search No Limit", + ], + benchmark_data_super, + benchmark_data_admin, + benchmark_data_demo, + ] + ) + info_message += "\nLegend: Queries | Query Time | Server Time | Total Time\n" + _logger.info(info_message) + + # ---------------------------------------------------------- + # Profiler + # ---------------------------------------------------------- + + @unittest.skip("Takes to long to be tested every time.") + def test_file_search_read_profile_admin(self): + @track_function() + @profile(minimum_queries=35) + def profile_function(model): + model.search_read([]) + + admin_uid = self.browse_ref("base.user_admin").id + model = self.env["dms.file"].with_user(admin_uid) + profile_function(model.with_context(bin_size=True)) diff --git a/dms/tests/test_directory.py b/dms/tests/test_directory.py new file mode 100644 index 00000000..f7e81eb1 --- /dev/null +++ b/dms/tests/test_directory.py @@ -0,0 +1,319 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021-2022 Tecnativa - Víctor Martínez +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import os + +from odoo import Command +from odoo.exceptions import AccessError, UserError +from odoo.tests import new_test_user +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageDatabaseBaseCase + +_path = os.path.dirname(os.path.dirname(__file__)) + + +class DirectoryTestCaseBase(StorageDatabaseBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.subdirectory = cls.create_directory(directory=cls.directory) + cls.file.directory_id = cls.subdirectory + cls.new_storage = cls.create_storage(save_type="database") + + @users("dms-manager", "dms-user") + def test_create_directory(self): + root_directory = self.create_directory(storage=self.storage) + sub_directory = self.create_directory(directory=root_directory) + self.assertEqual( + sub_directory.storage_id.id, + self.storage.id, + msg="The storage of the subdirectory should be the same as " + "the root directory", + ) + self.assertEqual( + root_directory.count_directories, + 1, + msg="The root directory should have one subdirectory", + ) + + @users("dms-manager", "dms-user") + def test_copy_root_directory(self): + copy_root_directory = self.directory.copy() + copy_root_directory.flush_recordset() + self.assertEqual( + self.directory.storage_id.id, + copy_root_directory.storage_id.id, + msg="The storage of the copied root directory should be the same as the " + "original root directory", + ) + self.assertEqual( + self.directory.count_directories, + copy_root_directory.count_directories, + msg="The copied root directory should have the same number of " + "subdirectories as the original root directory", + ) + self.assertEqual( + self.directory.count_files, + copy_root_directory.count_files, + msg="The copied root directory should have the same number of " + "files as the original root directory", + ) + + @users("dms-manager", "dms-user") + def test_copy_sub_directory(self): + copy_sub_directory = self.subdirectory.copy() + self.assertEqual( + self.subdirectory.storage_id.id, + copy_sub_directory.storage_id.id, + msg="The storage of the copied subdirectory should be the same as the " + "original subdirectory", + ) + self.assertEqual( + self.subdirectory.count_directories, + copy_sub_directory.count_directories, + msg="The copied subdirectory should have the same number of subdirectories " + "as the original subdirectory", + ) + self.assertEqual( + self.subdirectory.count_files, + copy_sub_directory.count_files, + msg="The copied subdirectory should have the same number of " + "files as the original subdirectory", + ) + + @users("dms-manager", "dms-user") + def test_rename_directory(self): + path_names = self.subdirectory.complete_name + self.directory.write({"name": f"New Test Name {self.env.user.login}"}) + self.assertNotEqual( + path_names, + self.subdirectory.complete_name, + msg="The path name of the subdirectory should have changed", + ) + + @users("dms-manager", "dms-user") + def test_move_directory(self): + with self.assertRaises(UserError, msg="The root directory should not be moved"): + self.directory.write( + { + "is_root_directory": False, + "parent_id": self.subdirectory.id, + } + ) + with self.assertRaises( + UserError, msg="The subdirectory storage should not be changed" + ): + self.subdirectory.write( + { + "is_root_directory": True, + "storage_id": self.new_storage.id, + "parent_id": False, + } + ) + self.subdirectory.write( + { + "is_root_directory": True, + "storage_id": self.storage.id, + "parent_id": False, + } + ) + new_directory = self.create_directory(storage=self.storage) + self.subdirectory.write( + { + "is_root_directory": False, + "storage_id": False, + "parent_id": new_directory.id, + } + ) + with self.assertRaises(UserError, msg="The root directory should not be moved"): + self.directory.storage_id = self.new_storage.id + self.subdirectory.write( + { + "is_root_directory": False, + "storage_id": False, + "parent_id": self.directory.id, + } + ) + + @users("dms-manager", "dms-user") + @mute_logger("odoo.models.unlink") + def test_unlink_root_directory(self): + root_directory = self.create_directory(storage=self.storage) + sub_directory = self.create_directory(directory=root_directory) + sub_files = self.create_file(directory=sub_directory) + root_directory.unlink() + self.assertFalse( + sub_directory.exists(), msg="The subdirectory should not exist anymore" + ) + self.assertFalse( + sub_files.exists(), msg="The subfiles should not exist anymore" + ) + + @users("dms-manager", "dms-user") + @mute_logger("odoo.models.unlink") + def test_unlink_directory(self): + root_directory = self.create_directory(storage=self.storage) + sub_directory = self.create_directory(directory=root_directory) + sub_files = self.create_file(directory=sub_directory) + sub_directory.unlink() + self.assertTrue( + root_directory.exists(), msg="The root directory should still exist" + ) + self.assertFalse( + sub_files.exists(), msg="The subfiles should not exist anymore" + ) + + @users("dms-manager", "dms-user") + def test_storage(self): + root_directory = self.create_directory(storage=self.storage) + sub_directory = self.create_directory(directory=root_directory) + self.assertEqual( + sub_directory.storage_id.id, + self.storage.id, + msg="The storage " + "of the subdirectory should be the same as the root " + "directory", + ) + with self.assertRaises( + UserError, msg="The storage of the root directory should " "not be changed" + ): + root_directory.write({"storage_id": self.new_storage.id}) + + @users("dms-manager", "dms-user") + def test_starred(self): + self.directory.toggle_starred() + self.subdirectory.write({"starred": True}) + starred = self.directory_model.search([("starred", "=", True)]) + self.assertIn( + self.directory.id, starred.ids, msg="The directory should be starred" + ) + self.assertIn( + self.subdirectory.id, starred.ids, msg="The subdirectory should be starred" + ) + + @users("dms-manager", "dms-user") + def test_count_directories(self): + self.assertTrue( + self.directory.count_directories, + msg="The directory should have subdirectories", + ) + + @users("dms-manager", "dms-user") + def test_count_files(self): + self.assertTrue( + self.subdirectory.count_files, msg="The subdirectory should have files" + ) + + @users("dms-manager", "dms-user") + def test_count_elements(self): + self.assertTrue( + self.directory.count_elements, + msg="The directory should have subdirectories and files", + ) + + @users("dms-manager", "dms-user") + def test_count_total_directories(self): + self.assertTrue( + self.directory.count_total_directories, + msg="The directory should have subdirectories", + ) + + @users("dms-manager", "dms-user") + def test_count_count_total_files(self): + self.assertTrue( + self.directory.count_total_files, msg="The directory should have files" + ) + + @users("dms-manager", "dms-user") + def test_count_total_elements(self): + self.assertTrue( + self.directory.count_total_elements, + msg="The directory should have subdirectories and files", + ) + + @users("dms-manager", "dms-user") + def test_size(self): + self.assertTrue(self.directory.size, msg="The directory should have a size") + + @users("dms-manager", "dms-user") + def test_name_get(self): + directory = self.subdirectory.with_context(dms_directory_show_path=True) + self.assertTrue( + "/" in directory.with_context(dms_directory_show_path=True).display_name, + msg="The path should be displayed in the directory name", + ) + + @users("dms-manager", "dms-user") + def test_name_search(self): + directories = self.directory_model.name_search("/") + self.assertTrue(len(directories), msg="The root directory should be found") + + @users("dms-manager", "dms-user") + def test_search_panel(self): + self.assertTrue( + self.directory_model.search_panel_select_multi_range("parent_id"), + msg="The parent_id field should be a multi range field", + ) + self.assertTrue( + self.directory_model.search_panel_select_multi_range("category_id"), + msg="The category_id field should be a multi range field", + ) + self.assertTrue( + self.directory_model.search_panel_select_multi_range("tag_ids"), + msg="The tag_ids field should be a multi range field", + ) + + def test_directory_unlink_custom(self): + user = new_test_user( + self.env, login="test-dms-customer-user", groups="dms.group_dms_user" + ) + group = self.access_group_model.create( + {"name": "Test read group", "explicit_user_ids": [Command.set(user.ids)]} + ) + root_directory = self.create_directory(storage=self.storage) + root_directory.group_ids = [Command.link(group.id)] + with self.assertRaises(AccessError): + root_directory.with_user(user).unlink() + + +class DirectoryMailTestCase(StorageDatabaseBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.params = cls.env["ir.config_parameter"].sudo() + cls.params.set_param("mail.catchall.domain", "dmstest.com") + cls.domain = cls.env["mail.alias.domain"].create({"name": "dmstest.com"}) + cls.alias = cls.env["mail.alias"].create( + { + "alias_model_id": cls.env["ir.model"] + .search([("model", "=", "dms.directory")]) + .id, + "alias_domain_id": cls.domain.id, + } + ) + + @mute_logger("odoo.addons.mail.mail_thread") + def test_mail_alias_files(self): + self.directory.write({"alias_process": "files", "alias_name": "directory+test"}) + self._handle_mail_reception() + + def _handle_mail_reception(self): + with open(os.path.join(_path, "tests", "data", "mail01.eml")) as file: + self.env["mail.thread"].message_process(None, file.read()) + with open(os.path.join(_path, "tests", "data", "mail02.eml")) as file: + self.env["mail.thread"].message_process(None, file.read()) + + @mute_logger("odoo.addons.mail.mail_thread") + def test_mail_alias_directory(self): + self.directory.write( + {"alias_process": "directory", "alias_name": "directory+test"} + ) + self.assertEqual( + self.directory.alias_id.display_name, + f"{self.directory.alias_name}@{self.domain.name}", + ) diff --git a/dms/tests/test_file.py b/dms/tests/test_file.py new file mode 100644 index 00000000..f67aa4ec --- /dev/null +++ b/dms/tests/test_file.py @@ -0,0 +1,193 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021-2022 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import base64 + +from odoo.exceptions import UserError +from odoo.tests import new_test_user +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageFileBaseCase + +try: + import magic +except ImportError: + magic = None + + +class FileFilestoreTestCase(StorageFileBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.user_a = new_test_user(cls.env, login="user-a", groups="dms.group_dms_user") + cls.directory_group_a = cls.create_directory(storage=cls.storage) + cls.inaccessible_directory = cls.create_directory(storage=cls.storage) + cls.inaccessible_file = cls.create_file(directory=cls.inaccessible_directory) + cls.inaccessible_group = cls.access_group_model.create( + { + "name": "Inaccessible Group. No directory set", + "perm_create": True, + "explicit_user_ids": [(6, 0, [cls.user_a.id])], + } + ) + cls.sub_directory_x = cls.create_directory(directory=cls.directory_group_a) + cls.group_a = cls.access_group_model.create( + { + "name": "Group A", + "perm_create": True, + "explicit_user_ids": [(6, 0, [cls.user_a.id])], + "directory_ids": [ + (4, cls.directory_group_a.id), + (4, cls.sub_directory_x.id), + ], + } + ) + cls.directory_group_a.group_ids = [(4, cls.group_a.id)] + cls.file2 = cls.create_file(directory=cls.sub_directory_x) + + @users("user-a") + def test_unaccessible_file(self): + dms_files = self.file_model.with_user(self.env.user).search( + [("storage_id", "=", self.storage.id)] + ) + self.assertNotIn( + self.inaccessible_file.id, + dms_files.ids, + msg="User A should not see the unaccessible file since it " + "was not granted access to the directory", + ) + self.assertIn( + self.file2.id, + dms_files.ids, + msg="User A should see the file2 since it was granted access to " + "the directory", + ) + + @users("user-a") + def test_inaccessible_directory(self): + dms_directories = self.directory_model.with_user(self.env.user).search( + [("storage_id", "=", self.storage.id)] + ) + self.assertNotIn( + self.inaccessible_directory.id, + dms_directories.ids, + msg="User A should not see the inaccessible directory since " + "it was not granted access to the directory", + ) + self.assertIn( + self.sub_directory_x.id, + dms_directories.ids, + msg="User A should see the sub_directory_x since it was granted " + "access to the directory", + ) + + @users("user-a") + def test_file_access(self): + dms_files = self.file_model.with_user(self.env.user).search( + [("storage_id", "=", self.storage.id)] + ) + self.assertNotIn(self.file.id, dms_files.ids, msg="User A should not see file") + self.assertIn(self.file2.id, dms_files.ids, msg="User A should see file2") + dms_directories = self.directory_model.with_user(self.env.user).search( + [("storage_id", "=", self.storage.id)] + ) + self.assertNotIn( + self.directory.id, + dms_directories.ids, + msg="User A should not see directory", + ) + self.assertIn( + self.sub_directory_x.id, + dms_directories.ids, + msg="User A should see sub_directory_x", + ) + + @users("dms-manager", "dms-user") + @mute_logger("odoo.models.unlink") + def test_content_file(self): + object_file = self.create_file(directory=self.directory) + self.assertTrue(object_file.content, msg="Content is not empty") + self.assertTrue(object_file.content_file, msg="Content file is not empty") + self.assertTrue( + object_file.with_context(bin_size=True).content, + msg="Content is not empty (with bin_size)", + ) + self.assertTrue( + object_file.with_context(bin_size=True).content_file, + msg="Content file is not empty (with bin_size)", + ) + self.assertTrue( + object_file.with_context(human_size=True).content_file, + msg="Content file is not empty (with human_size)", + ) + self.assertTrue( + object_file.with_context(base64=True).content_file, + msg="Content file is not empty (with base64)", + ) + self.assertTrue( + object_file.with_context(stream=True).content_file, + msg="Content file is not empty (with stream)", + ) + oid = object_file.with_context(oid=True).content_file + self.assertTrue(oid, msg="Content file is not empty (with oid)") + object_file.with_context(**{"show_content": True}).write( + {"content": base64.b64encode(b"\xff new content")} + ) + self.assertNotEqual( + oid, + object_file.with_context(**{"oid": True}).content_file, + msg="Content file has changed", + ) + self.assertTrue(object_file.export_data(["content"])) + object_file.unlink() + + def test_content_file_mimetype(self): + file_svg = self.env.ref("dms.file_05_demo") + self.assertEqual(file_svg.mimetype, "image/svg+xml", msg="SVG mimetype") + file_logo = self.env.ref("dms.file_02_demo") + self.assertEqual(file_logo.mimetype, "image/jpeg", msg="JPEG mimetype") + + def test_content_file_mimetype_magic_library(self): + if not magic: + self.skipTest("Without python-magic library installed") + file_video = self.env.ref("dms.file_10_demo") + self.assertEqual(file_video.mimetype, "video/mp4", msg="MP4 mimetype") + + def test_content_file_extension(self): + file_pdf = self.env.ref("dms.file_27_demo") + self.assertEqual(file_pdf.extension, "pdf", msg="PDF extension") + file_pdf.name = "Document_05" + self.assertEqual( + file_pdf.extension, "pdf", msg="PDF extension without extension" + ) + file_pdf.name = "Document_05.pdf" + self.assertEqual(file_pdf.extension, "pdf", msg="PDF extension with extension") + + def test_wizard_dms_file_move(self): + file3 = self.create_file(directory=self.sub_directory_x) + all_files = self.file + self.file2 + file3 + # Error: All files must have the same root directory + with self.assertRaises( + UserError, msg="All files must have the same root directory" + ): + self.file_model.with_context( + active_ids=all_files.ids + ).action_wizard_dms_file_move() + # Change the files that have the same root directory + files = self.file2 + file3 + res = self.file_model.with_context( + active_ids=files.ids + ).action_wizard_dms_file_move() + wizard_model = self.env[res["res_model"]].with_context(**res["context"]) + wizard = wizard_model.create({"directory_id": self.directory.id}) + self.assertEqual(wizard.count_files, 2, msg="Wizard has 2 files") + wizard.process() + self.assertEqual( + self.file2.directory_id, self.directory, msg="File2 has a new directory" + ) + self.assertEqual( + file3.directory_id, self.directory, msg="File3 has a new directory" + ) diff --git a/dms/tests/test_file_database.py b/dms/tests/test_file_database.py new file mode 100644 index 00000000..d619db37 --- /dev/null +++ b/dms/tests/test_file_database.py @@ -0,0 +1,154 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2021-2022 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.exceptions import UserError +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageDatabaseBaseCase + + +class FileDatabaseTestCase(StorageDatabaseBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.file_demo_01 = cls.env.ref("dms.file_01_demo") + cls.directory2 = cls.create_directory(storage=cls.storage) + cls.new_storage2 = cls.create_storage(save_type="database") + cls.directory3 = cls.create_directory(storage=cls.new_storage2) + + @users("dms-manager", "dms-user") + def test_create_file(self): + root_directory = self.create_directory(storage=self.storage) + self.create_file(directory=root_directory) + sub_directory = self.create_directory(directory=root_directory) + self.create_file(sub_directory) + self.assertEqual(root_directory.count_total_files, 2, "Total files should be 2") + self.assertEqual( + sub_directory.count_files, 1, "Subdirectory total files should be 1" + ) + + @users("dms-manager", "dms-user") + def test_lock_file(self): + file = self.create_file(directory=self.directory) + file.lock() + self.assertTrue(file.is_locked, "File should be locked") + file.unlock() + self.assertFalse(file.is_locked, "File should be unlocked") + + @users("dms-manager", "dms-user") + def test_copy_file(self): + copy_file = self.file.copy() + self.assertEqual( + self.file.storage_id, copy_file.storage_id, "Storage should be the same" + ) + self.assertEqual( + self.file.content, copy_file.content, "Content should be the same" + ) + + @users("dms-manager", "dms-user") + def test_rename_file(self): + file = self.create_file(directory=self.directory) + extension = file.extension + file.write({"name": f"test-{self.env.user.login}.jpg"}) + self.assertNotEqual(file.extension, extension, "Extension should be different") + + @users("dms-manager", "dms-user") + def test_move_file(self): + file = self.create_file(directory=self.directory) + path_names = file.path_names + file.write({"directory_id": self.directory2.id}) + file.flush_recordset() + self.assertNotEqual( + path_names, file.path_names, "Path names should be different" + ) + + @users("dms-manager", "dms-user") + def test_move_directory(self): + with self.assertRaises( + UserError, msg="Directory can't have any parent, because it is " "root" + ): + self.directory.write( + { + "is_root_directory": False, + "parent_id": self.directory3.id, + } + ) + + @users("dms-manager", "dms-user") + @mute_logger("odoo.models.unlink") + def test_unlink_file(self): + file = self.create_file(directory=self.directory) + file.unlink() + self.assertFalse(file.exists(), "File should not exist") + + @users("dms-manager", "dms-user") + def test_compute_thumbnail(self): + self.assertTrue(self.file_demo_01.image_128, "Thumbnail should be computed") + + @users("dms-manager", "dms-user") + def test_compute_path_names(self): + self.assertTrue(self.file.path_names, "Path names should be computed") + + @users("dms-manager", "dms-user") + def test_compute_path_json(self): + self.assertTrue(self.file.path_json, "Path json should be computed") + + @users("dms-manager", "dms-user") + def test_compute_mimetype(self): + self.assertTrue(self.file.mimetype, "Mimetype should be computed") + + @users("dms-manager", "dms-user") + def test_compute_extension(self): + self.assertTrue(self.file.extension, "Extension should be computed") + + @users("dms-manager", "dms-user") + def test_size_calculation(self): + self.assertTrue(self.file.size, "Size should be computed") + + @users("dms-manager", "dms-user") + def test_checksum_calculation(self): + self.assertTrue(self.file.checksum, "Checksum should be computed") + + @users("dms-manager", "dms-user") + def test_compute_content(self): + self.assertTrue( + self.file.with_context(bin_size=True).content, + "Content should be computed (with bin_size)", + ) + self.assertTrue( + self.file.with_context(bin_size=False).content, + "Content should be computed (without bin_size)", + ) + self.assertNotEqual( + self.file.with_context(bin_size=False).content, + self.file.with_context(bin_size=True).content, + "Content should be different", + ) + + @users("dms-manager", "dms-user") + def test_compute_save_type(self): + self.assertTrue(self.file.save_type, "Save type should be computed") + + @users("dms-manager", "dms-user") + def test_compute_migration(self): + self.assertTrue(self.file.migration, "Migration should be computed") + + @users("dms-manager", "dms-user") + def test_search_panel(self): + self.assertTrue( + self.file.search_panel_select_range("directory_id"), + "Directory should be selected", + ) + self.assertTrue( + self.file.search_panel_select_multi_range("directory_id"), + "Directory should be selected", + ) + self.assertTrue( + self.file.search_panel_select_multi_range("tag_ids"), + "Tag should be selected", + ) + res = self.file.search_panel_select_range("directory_id", enable_counters=True) + self.assertTrue(self.directory2.id == x["id"] for x in res["values"]) diff --git a/dms/tests/test_portal.py b/dms/tests/test_portal.py new file mode 100644 index 00000000..dbc321ae --- /dev/null +++ b/dms/tests/test_portal.py @@ -0,0 +1,90 @@ +# Copyright 2021-2025 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl) + +import odoo.tests +from odoo.exceptions import AccessError +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageAttachmentBaseCase + + +@odoo.tests.tagged("post_install", "-at_install") +class TestDmsPortal(odoo.tests.HttpCase, StorageAttachmentBaseCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner = cls.env.ref("base.partner_demo_portal") + cls.portal_user = cls.partner.user_ids + cls._create_attachment("test.txt") + cls._create_attachment("test2.txt", cls.other_partner) + cls.directory_partner = cls._get_partner_directory() + cls.other_directory_partner = cls._get_partner_directory(cls.other_partner) + cls.file_partner = cls.directory_partner.file_ids[0] + cls.other_file_partner = cls.other_directory_partner.file_ids[0] + + def test_access_portal(self): + self.authenticate("portal", "portal") + # 404: Incorrect access_token + file_text = self.create_file(directory=self.directory_partner) + url = f"{file_text.access_url}&access_token=abc-def" + response = self.url_open(url, timeout=20) + self.assertEqual( + response.status_code, 404, "Can't access file with incorrect access_token" + ) + # 200 + response = self.url_open(self.file_partner._get_share_url(), timeout=20) + self.assertEqual( + response.status_code, 200, "Can access file with correct access_token" + ) + # 200 + response = self.url_open(self.directory_partner._get_share_url(), timeout=20) + self.assertEqual( + response.status_code, 200, "Can access directory with correct access_token" + ) + + def test_tour(self): + for tour in ("dms_portal_mail_tour", "dms_portal_partners_tour"): + with self.subTest(tour=tour): + self.start_tour("/my", tour, login="portal") + + @users("portal") + @mute_logger("odoo.addons.base.models.ir_rule") + def test_permission_portal_user_access_own_attachment(self): + """ + The user can access its own attachments, even if its access group are not set + """ + # Has to manually su=False because the portal user is not a superuser, + # but odoo uses somewhere sudo() internally + file = self.file_partner.with_user(self.env.user).with_env(self.env(su=False)) + directory = self.directory_partner.with_user(self.env.user).with_env( + self.env(su=False) + ) + # Portal user can only read + file.check_access("read") + + # Portal user can't do anything else + with self.assertRaises(AccessError, msg="Portal user should not have access"): + file.check_access("write") + file.check_access("unlink") + directory.check_access("create") + + @users("portal") + @mute_logger("odoo.addons.base.models.ir_rule") + def test_permission_portal_user_access_other_attachment(self): + """ + The user can't access other attachments if its access group are not set + """ + # Has to manually su=False because the portal user is not a superuser, + # but odoo uses somewhere sudo() internally + file = self.other_file_partner.with_user(self.env.user).with_env( + self.env(su=False) + ) + # file.invalidate_recordset() + # Portal user can't do anything + with self.assertRaises(AccessError, msg="Portal user should not have access"): + file.check_access("read") + with self.assertRaises(AccessError, msg="Portal user should not have access"): + file.check_access("write") + with self.assertRaises(AccessError, msg="Portal user should not have access"): + file.check_access("unlink") diff --git a/dms/tests/test_storage_attachment.py b/dms/tests/test_storage_attachment.py new file mode 100644 index 00000000..c278fcd4 --- /dev/null +++ b/dms/tests/test_storage_attachment.py @@ -0,0 +1,168 @@ +# Copyright 2021-2022 Tecnativa - Víctor Martínez +# Copyright 2021 Tecnativa - João Marques +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageAttachmentBaseCase + + +class StorageAttachmentTestCase(StorageAttachmentBaseCase): + @users("dms-manager") + @mute_logger("odoo.models.unlink") + def test_storage_attachment(self): + self._create_attachment("demo.txt") + self.assertTrue( + self.storage.storage_file_ids.filtered(lambda x: x.name == "demo.txt"), + "File should be created", + ) + directory = self._get_partner_directory() + self.assertEqual(directory.count_files, 1, "Directory should have 1 file") + self.assertEqual( + directory.file_ids[0].name, "demo.txt", "File should be demo.txt" + ) + file_01 = self.create_file(directory=directory) + self.assertEqual(file_01.storage_id, self.storage, "Storage should be the same") + self.assertEqual( + file_01.storage_id.save_type, "attachment", "Save type should be attachment" + ) + self.assertEqual(file_01.save_type, "database", "Save type should be database") + self.assertEqual(directory.count_files, 2, "Directory should have 2 files") + # Assert cascade removal + self.partner.unlink() + self.assertFalse(file_01.exists(), "File should not exist") + self.assertFalse(directory.exists(), "Directory should not exist") + + @users("dms-manager") + def test_storage_attachment_record_db_unlink(self): + self._create_attachment("demo.txt") + self.assertTrue( + self.storage.storage_file_ids.filtered(lambda x: x.name == "demo.txt") + ) + directory = self._get_partner_directory() + self.assertEqual(directory.res_model, self.partner._name) + self.assertEqual(directory.res_id, self.partner.id) + directory.res_id = -1 # Trick to reference a non-existing record + directories = self.env["dms.directory"].search([]) + self.assertNotIn(directory.id, directories.ids) + + @mute_logger("odoo.models.unlink") + def test_storage_attachment_unlink_lock_file(self): + group_partner_manager = self.env.ref("base.group_partner_manager") + self.dms_manager_user.write({"group_ids": [(4, group_partner_manager.id)]}) + self.dms_user.write({"group_ids": [(4, group_partner_manager.id)]}) + attachment = self._create_attachment("demo.txt") + attachment = attachment.with_user(self.dms_manager_user) + file = self.storage.storage_file_ids.filtered(lambda x: x.name == "demo.txt") + file.with_user(self.dms_user).lock() + self.assertTrue(file.is_locked) + self.assertFalse(file.is_lock_editor) + file.with_user(self.dms_user).unlock() + self.assertFalse(file.is_locked) + attachment.unlink() + self.assertFalse(file.exists()) + + @users("dms-manager") + def test_storage_attachment_misc(self): + attachment = self._create_attachment("demo.txt") + root_directory = self.storage.root_directory_ids.filtered( + lambda x: x.is_root_directory + ) + self.assertEqual( + root_directory.count_directories, + 1, + "Root directory should have 1 directory", + ) + self.assertEqual( + len(root_directory.child_directory_ids), + 1, + "Root directory should have 1 child directory", + ) + child_directory = root_directory.child_directory_ids[0] + self.assertEqual( + child_directory.res_model, + self.partner_model._name, + "Model should be res.partner", + ) + self.assertEqual( + child_directory.res_id, self.partner.id, "Record ID should be partner ID" + ) + self.assertEqual( + len(root_directory.child_directory_ids.file_ids), + 1, + "Root directory should have 1 file", + ) + dms_file = root_directory.child_directory_ids.file_ids[0] + self.assertEqual( + dms_file.attachment_id, attachment, "Attachment should be the same" + ) + self.assertEqual(dms_file.name, "demo.txt", "Name should be demo.txt") + self.assertEqual( + dms_file.res_model, self.partner_model._name, "Model should be res.partner" + ) + self.assertEqual( + dms_file.res_id, self.partner.id, "Record ID should be partner ID" + ) + directory = self._get_partner_directory() + file_01 = self.create_file(directory=directory) + self.assertEqual( + file_01.res_model, self.partner_model._name, "Model should be res.partner" + ) + self.assertEqual( + file_01.res_id, self.partner.id, "Record ID should be partner ID" + ) + self.assertEqual(file_01.storage_id, self.storage, "Storage should be the same") + self.assertEqual( + file_01.storage_id.save_type, "attachment", "Save type should be attachment" + ) + self.assertEqual(file_01.save_type, "database", "Save type should be database") + self.assertEqual( + self.storage.count_storage_files, 2, "Storage should have 2 files" + ) + dms_file.unlink() + self.assertFalse(attachment.exists()) + + @users("dms-manager") + def test_storage_attachment_directory_record_ref_access_dms_manager(self): + self._create_attachment("demo.txt") + directory = self._get_partner_directory() + self.assertTrue(directory.permission_read, "Permission read should be True") + self.assertEqual(self.partner.type, "contact", "Type should be contact") + self.assertTrue( + directory.sudo().permission_read, "Permission read should be True" + ) + + @users("dms-user") + def test_storage_attachment_directory_record_ref_access_dms_user(self): + self._create_attachment("demo.txt") + directory = self._get_partner_directory() + self.assertTrue(directory.permission_read, "Permission read should be True") + self.assertEqual(self.partner.type, "contact", "Type should be contact") + self.assertTrue( + directory.sudo().permission_read, "Permission read should be True" + ) + directory.invalidate_recordset() + self.assertTrue( + directory.permission_read, "Permission read should still be True" + ) + + @users("basic-user") + def test_storage_attachment_directory_record_ref_access_basic_user(self): + self._create_attachment("demo.txt") + directory = self._get_partner_directory() + self.assertTrue(directory.permission_read, "Permission read should be True") + self.assertTrue(directory.permission_read, "Permission read should be True") + self.assertEqual(self.partner.type, "contact", "Type should be contact") + self.partner.sudo().write({"type": "other"}) + self.assertEqual(self.partner.type, "other", "Type should now be other") + self.assertTrue( + directory.sudo().permission_read, "Permission read should be True" + ) + + @users("basic-user") + def test_create_attachment_basic_user(self): + attachment = self._create_attachment("Test file") + self.assertEqual(attachment.name, "Test file", "Name should be Test file") + self.assertTrue(self._get_partner_directory(), "Directory should exist") diff --git a/dms/tests/test_storage_database.py b/dms/tests/test_storage_database.py new file mode 100644 index 00000000..cd8dab61 --- /dev/null +++ b/dms/tests/test_storage_database.py @@ -0,0 +1,138 @@ +# Copyright 2017-2019 MuK IT GmbH. +# Copyright 2020 Creu Blanca +# Copyright 2022 Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.tests.common import users +from odoo.tools import mute_logger + +from .common import StorageDatabaseBaseCase + + +class StorageDatabaseTestCase(StorageDatabaseBaseCase): + @users("dms-manager") + def test_action_storage_migrate(self): + self.storage.action_storage_migrate() + + @users("dms-manager", "dms-user") + def test_count_storage_directories(self): + self.assertTrue( + self.storage.count_storage_directories, "Storage should have directories" + ) + + @users("dms-manager", "dms-user") + def test_count_storage_files(self): + self.assertTrue(self.storage.count_storage_files, "Storage should have files") + + @users("dms-manager") + @mute_logger("odoo.models.unlink") + def test_file_migrate(self): + root_directory = self.storage.root_directory_ids.filtered( + lambda x: x.is_root_directory + ) + file_01 = self.create_file(directory=root_directory) + self.assertEqual( + file_01.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_01.storage_id.save_type, "database", "Storage should be database" + ) + self.assertEqual( + file_01.save_type, "database", "File savetype should be database" + ) + self.storage.write({"save_type": "file"}) + directory = self.create_directory(storage=self.storage) + file_02 = self.create_file(directory=directory) + self.assertEqual( + file_01.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual(file_01.storage_id.save_type, "file", "Storage should be file") + self.assertEqual( + file_01.save_type, "database", "File savetype should be database" + ) + self.assertEqual( + file_02.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual(file_02.storage_id.save_type, "file", "Storage should be file") + self.assertEqual(file_02.save_type, "file", "File savetype should be file") + self.storage.action_storage_migrate() + self.assertEqual( + file_01.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual(file_01.storage_id.save_type, "file", "Storage should be file") + self.assertEqual(file_01.save_type, "file", "File savetype should be file") + self.assertEqual( + file_02.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual(file_02.storage_id.save_type, "file", "Storage should be file") + self.assertEqual(file_02.save_type, "file", "File savetype should be file") + self.storage.write({"save_type": "database"}) + self.storage.action_storage_migrate() + self.assertEqual( + file_01.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_01.storage_id.save_type, "database", "Storage should be database" + ) + self.assertEqual( + file_01.save_type, "database", "File savetype should be database" + ) + self.assertEqual( + file_02.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_02.storage_id.save_type, "database", "Storage should be database" + ) + self.assertEqual( + file_02.save_type, "database", "File savetype should be database" + ) + self.storage.write({"save_type": "attachment"}) + model_partner = self.env.ref("base.model_res_partner") + partner = self.partner_model.create({"name": "Test partner"}) + directory = self.directory_model.create( + { + "name": self.partner_model._name, + "model_id": model_partner.id, + "res_id": partner.id, + "parent_id": self.storage.root_directory_ids[0].id, + "storage_id": self.storage.id, + } + ) + file_03 = self.create_file(directory=directory) + self.assertEqual( + file_02.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_02.storage_id.save_type, "attachment", "Storage should be attachment" + ) + self.assertEqual( + file_02.save_type, "database", "File savetype should be database" + ) + self.assertEqual( + file_03.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_03.storage_id.save_type, "attachment", "Storage should be attachment" + ) + self.assertEqual( + file_03.save_type, "database", "File savetype should be database" + ) + self.storage.action_storage_migrate() + self.assertEqual( + file_02.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_02.storage_id.save_type, "attachment", "Storage should be attachment" + ) + self.assertEqual( + file_02.save_type, "database", "File savetype should be database" + ) + self.assertEqual( + file_03.storage_id, self.storage, "File should be in the storage" + ) + self.assertEqual( + file_03.storage_id.save_type, "attachment", "Storage should be attachment" + ) + self.assertEqual( + file_03.save_type, "database", "File savetype should be database" + ) diff --git a/dms/tools/__init__.py b/dms/tools/__init__.py new file mode 100644 index 00000000..1f48df09 --- /dev/null +++ b/dms/tools/__init__.py @@ -0,0 +1 @@ +from . import file diff --git a/dms/tools/file.py b/dms/tools/file.py new file mode 100644 index 00000000..3f3bce3f --- /dev/null +++ b/dms/tools/file.py @@ -0,0 +1,103 @@ +# Copyright 2020 Antoni Romera +# Copyright 2017-2019 MuK IT GmbH +# Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import mimetypes +import os +import re +import shutil +import tempfile + +from odoo.tools.mimetypes import guess_mimetype + + +def check_name(name): + """ + Check if a file name is valid. + + :param str name: The file name to check. + :return: True if the file name is valid, False otherwise. + :rtype: bool + """ + tmp_dir = tempfile.mkdtemp() + try: + open(os.path.join(tmp_dir, name), "a").close() + except OSError: + return False + finally: + shutil.rmtree(tmp_dir) + return True + + +def compute_name(name, suffix, escape_suffix): + """ + Compute a new name by adding a suffix to the original name. + + :param str name: The original name. + :param int suffix: The suffix to add. + :param bool escape_suffix: If True, the suffix is added in between the name and + the file extension. + :return: The new name. + :rtype: str + """ + if escape_suffix: + name, extension = os.path.splitext(name) + return f"{name}({suffix}){extension}" + + return f"{name}({suffix})" + + +def unique_name(name, names, escape_suffix=False): + """ + Generate a unique name by adding a suffix to the original name. + + :param str name: The original name. + :param list names: The list of existing names. + :param bool escape_suffix: If True, the suffix is added in between the name and + the file extension. + :return: The unique name. + :rtype: str + """ + if name not in names: + return name + + # Extract the suffix from the name + # e.g: "file(1).txt" -> "1" + # "Directory (1)(2)" -> "2" + digits = re.compile(r"\((\d+)\)(\.\w+)?$") + match = digits.search(name) + suffix = 1 + if match: + suffix = int(match.group(1)) + 1 + # get the name without the suffix and append the extension + name = name[: match.span()[0]] + (match.group(2) or "") + + name = compute_name(name, suffix, escape_suffix) + while name in names: + # has to check recursively if the new name is unique because the user can + # rename the file with suffix n+1 + # and then duplicate the file n, leading to a new file with suffix n+1 which + # is already used. + return unique_name(name, names, escape_suffix) + return name + + +def guess_extension(filename=None, mimetype=None, binary=None): + """ + Guess the extension of a file. + + :param str filename: The name of the file. + :param str mimetype: The mimetype of the file. + :param str binary: The binary content of the file. + + :return: The extension of the file. + :rtype: str + """ + extension = filename and os.path.splitext(filename)[1][1:].strip().lower() + if not extension and mimetype and mimetype != "application/x-empty": + extension = mimetypes.guess_extension(mimetype)[1:].strip().lower() + if not extension and binary: + mimetype = guess_mimetype(binary, default="") + extension = mimetypes.guess_extension(mimetype)[1:].strip().lower() + return extension diff --git a/dms/views/dms_access_groups_views.xml b/dms/views/dms_access_groups_views.xml new file mode 100644 index 00000000..7d501acd --- /dev/null +++ b/dms/views/dms_access_groups_views.xml @@ -0,0 +1,112 @@ + + + + + dms_access_groups.list + dms.access.group + + + + + + + + + + + + + dms_access.group.form + dms.access.group + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + Access Groups + dms.access.group + list,form + + +
diff --git a/dms/views/dms_category.xml b/dms/views/dms_category.xml new file mode 100644 index 00000000..ce1e8dc1 --- /dev/null +++ b/dms/views/dms_category.xml @@ -0,0 +1,110 @@ + + + + + dms_category.search + dms.category + + + + + + + + + dms_category.list + dms.category + + + + + + + + + + dms_category.form + dms.category + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Categories + dms.category + list,form + {'search_default_all': 1} + +

+ Create a new Category. +

+

+ Categories are used to categorize Documents. +

+
+
+ diff --git a/dms/views/dms_directory.xml b/dms/views/dms_directory.xml new file mode 100644 index 00000000..4d048a53 --- /dev/null +++ b/dms/views/dms_directory.xml @@ -0,0 +1,727 @@ + + + + + Subdirectories + dms.directory + kanban,list,form + + [ + ("is_hidden", "=", False), + ] + + + { + 'default_parent_id': active_id, + 'searchpanel_default_parent_id': active_id + } + + +

+ Click to add a new directory. +

+

+ Directories can be used to structure and organize + files directly in Odoo. +

+
+
+ + Files + dms.file + kanban,list,graph,pivot,form + + [ + ("is_hidden", "=", False), + ] + + + { + 'default_directory_id': active_id, + 'searchpanel_default_directory_id': active_id + } + + +

+ Click to add a new file. +

+

+ Files are used to save content directly in Odoo. +

+
+
+ + Subdirectories + dms.directory + kanban,list,form + + [ + ("parent_id", "child_of", active_id), + ("is_hidden", "=", False), + ("id", "!=", active_id), + ] + + + { + 'default_parent_id': active_id, + } + + +

+ Click to add a new directory. +

+

+ Directories can be used to structure and organize + files directly in Odoo. +

+
+
+ + Files + dms.file + kanban,list,graph,pivot,form + + [ + ("is_hidden", "=", False), + ] + + + { + 'default_directory_id': active_id, + 'searchpanel_default_directory_id': active_id + } + + +

+ Click to add a new file. +

+

+ Files are used to save content directly in Odoo. +

+
+
+ + dms_directory.search + dms.directory + + + + + + + + + + + + + + + + + + + + + + + + + + dms_directory.kanban + dms.directory + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+ + + + +
+
+
+ +
+
+
+ +
+
+
+ Icon +
+
+ + + +
+
+ +
+
+
+
+
+
+ + dms_directory.list + dms.directory + + + + + + + + + + + + + dms_directory.form + dms.directory + +
+
+ +
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Directories + dms.directory + kanban,list,form + [("is_hidden", "=", False)] + +

+ Add a new Directory. +

+

+ Directories can be used to structure and organize + files directly in Odoo. +

+
+
+ + dms_directory.form + dms.directory + + primary + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + + + + + + + + + +
+
+
+
+
+
+ + New Root Directory + dms.directory + form + new + + + diff --git a/dms/views/dms_file.xml b/dms/views/dms_file.xml new file mode 100644 index 00000000..ed44ad57 --- /dev/null +++ b/dms/views/dms_file.xml @@ -0,0 +1,638 @@ + + + + + dms_file.search + dms.file + + + + + + + + + + + + + + + + + + + + + + + + + + dms_file.kanban + dms.file + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + Icon + +
+
+ + + +
+
+
+ + + + +
+
+
+
+
+ + + + + + + dms_file.kanban.wizard.selection + dms.file + + 9999 + primary + + + + o_kanban_mobile mk_file_kanban_view + + +
+ + + + + dms_file.list + dms.file + + + + + + + + + + + + + + + + + + dms_file.graph + dms.file + + + + + + + + + dms_file.pivot + dms.file + + + + + + + + + + dms_file.form + dms.file + +
+
+
+ + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Files + dms.file + kanban,list,graph,pivot,form + [("is_hidden", "=", False)] + +

+ Add a new File. +

+

+ Files are used to save content directly in Odoo. +

+
+
+ + + Files + dms.file + new + kanban + {'create': False} + + + + dms_file.search + dms.file + + + + + + + + + + + + + + + dms_file.list + dms.file + + + + + + + + + + + + + + + Files + dms.file + list + + [('require_migration', '=', True), '|', ('active', '=', False), ('active', '!=', False)] + + {'search_default_group_storage': 1} + + +

+ Add a new File. +

+

+ Files are used to save content directly in Odoo. +

+
+
+ + dms_file.form + dms.file + + primary + + + 1 + + + 1 + +
+
+
+
+
+
+ + New Root Directory + dms.file + form + new + + + + Move + + + + list + code + + action = model.action_wizard_dms_file_move() + + + diff --git a/dms/views/dms_tag.xml b/dms/views/dms_tag.xml new file mode 100644 index 00000000..663a2bae --- /dev/null +++ b/dms/views/dms_tag.xml @@ -0,0 +1,151 @@ + + + + + dms_tag.search + dms.tag + + + + + + + + + + + + + dms_tag.kanban + dms.tag + + + + +
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ + dms_tag.list + dms.tag + + + + + + + + + + dms_tag.form + dms.tag + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + Tags + dms.tag + kanban,list,form + {'search_default_group_by_category': 1} + +

+ Click to create a new tag. +

+

+ Tags are used to categorize Documents. +

+
+
+ diff --git a/dms/views/menu.xml b/dms/views/menu.xml new file mode 100644 index 00000000..2b70c2c5 --- /dev/null +++ b/dms/views/menu.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/dms/views/res_config_settings.xml b/dms/views/res_config_settings.xml new file mode 100644 index 00000000..f9f0484c --- /dev/null +++ b/dms/views/res_config_settings.xml @@ -0,0 +1,56 @@ + + + + + res.config.settings.view.form.inherit.dms + res.config.settings + + + + + + + + + + + + + +
+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +º + + Storages + dms.storage + list,form + +

+ Create a new Storage object. +

+

+ Storages are used to configure your Documents. +

+
+
+ + dms_storage.form + dms.storage + + primary + + + 1 + + + 1 + +
+
+
+
+
+
+ + New Storage + dms.storage + form + new + + +
diff --git a/dms/wizards/__init__.py b/dms/wizards/__init__.py new file mode 100644 index 00000000..8f4a16b6 --- /dev/null +++ b/dms/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import wizard_dms_file_move +from . import wizard_dms_share diff --git a/dms/wizards/wizard_dms_file_move.py b/dms/wizards/wizard_dms_file_move.py new file mode 100644 index 00000000..53109b58 --- /dev/null +++ b/dms/wizards/wizard_dms_file_move.py @@ -0,0 +1,25 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class WizardDmsFileMove(models.TransientModel): + _name = "wizard.dms.file.move" + _description = "Wizard Dms File Move" + + count_files = fields.Integer(readonly=True) + directory_id = fields.Many2one( + comodel_name="dms.directory", required=True, string="Directory" + ) + + @api.model + def default_get(self, fields): + vals = super().default_get(fields) + if self.env.context.get("active_ids"): + vals.update({"count_files": len(self.env.context.get("active_ids"))}) + return vals + + def process(self): + items = self.env["dms.file"].browse(self.env.context.get("active_ids")) + items.write({"directory_id": self.directory_id}) diff --git a/dms/wizards/wizard_dms_file_move_views.xml b/dms/wizards/wizard_dms_file_move_views.xml new file mode 100644 index 00000000..127d7b8b --- /dev/null +++ b/dms/wizards/wizard_dms_file_move_views.xml @@ -0,0 +1,41 @@ + + + + + wizard.dms.file.move.form + wizard.dms.file.move + +
+ + + + + +
+
+ +
+
+ + Move files + wizard.dms.file.move + form + new + +
diff --git a/dms/wizards/wizard_dms_share.py b/dms/wizards/wizard_dms_share.py new file mode 100644 index 00000000..c36a3c94 --- /dev/null +++ b/dms/wizards/wizard_dms_share.py @@ -0,0 +1,19 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class WizardDmsShare(models.TransientModel): + _name = "wizard.dms.share" + _inherit = "portal.share" + _description = "Wizard for sharing DMS records" + + @api.model + def _selection_target_model(self): + return [ + (model.model, model.name) + for model in self.env["ir.model"] + .sudo() + .search([("model", "in", ("dms.directory", "dms.file"))]) + ] diff --git a/dms/wizards/wizard_dms_share_views.xml b/dms/wizards/wizard_dms_share_views.xml new file mode 100644 index 00000000..affae078 --- /dev/null +++ b/dms/wizards/wizard_dms_share_views.xml @@ -0,0 +1,28 @@ + + + + wizard.dms.share.form + wizard.dms.share + + primary + + + 1 + + + + + Share + wizard.dms.share + + form + new + + + Share + wizard.dms.share + + form + new + + diff --git a/docx_report/__init__.py b/docx_report/__init__.py new file mode 100644 index 00000000..38718f08 --- /dev/null +++ b/docx_report/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import controllers \ No newline at end of file diff --git a/docx_report/__manifest__.py b/docx_report/__manifest__.py new file mode 100644 index 00000000..e8fcbaf5 --- /dev/null +++ b/docx_report/__manifest__.py @@ -0,0 +1,26 @@ +{ + "name": "DOCX Templates", + "summary": "DOCX-шаблоны", + "version": "19.0.1.0.0", + "license": "LGPL-3", + "category": "Accounting/Localizations", + "depends": [ + "base", + ], + "data": [ + "security/ir.model.access.csv", + "views/docx_template_views.xml", + "views/docx_report.xml", + + ], + "demo": [ + "demo/demo.xml", + ], + "assets": { + "web.assets_backend": [ + "docx_report/static/src/js/contract_docx_print_menu.js", + "docx_report/static/src/js/action_manager_report.js", + ], + }, + "installable": True, +} diff --git a/docx_report/controllers/__init__.py b/docx_report/controllers/__init__.py new file mode 100644 index 00000000..12a7e529 --- /dev/null +++ b/docx_report/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/docx_report/controllers/main.py b/docx_report/controllers/main.py new file mode 100644 index 00000000..baa1f58e --- /dev/null +++ b/docx_report/controllers/main.py @@ -0,0 +1,219 @@ +from json import dumps as json_dumps, loads as json_loads +from werkzeug.urls import url_decode +import re + +from odoo.http import ( + content_disposition, + request, + route, + serialize_exception as _serialize_exception, +) +from odoo.tools import html_escape +from odoo.tools.safe_eval import safe_eval, time + +from odoo.addons.web.controllers.report import ReportController + +import logging +_logger = logging.getLogger(__name__) + +class DocxReportController(ReportController): + + def _prepare_docx_report_context(self, docids, data): + """ + По сути дублирует сбор контекста и docids в части базового report_routes. Новая логика непосредственно в переопределенном report_routes. + Возможно есть и более изящный способ. + """ + context = dict(request.env.context) + payload = {} + docids_list = [int(i) for i in docids.split(",")] if docids else [] + if data.get("options"): + payload.update(json_loads(data.pop("options"))) + if data.get("context"): + payload["context"] = json_loads(data["context"]) + if payload["context"].get("lang") and not payload.get("force_context_lang"): + del payload["context"]["lang"] + context.update(payload["context"]) + return context, payload, docids_list + + def _get_docx_report_from_name(self, reportname): + template = request.env["docx.template"].search([("report_name", "=", reportname)], limit=1) + if template: + return template.report_id + return request.env["ir.actions.report"]._get_report_from_name(reportname) + + @route() + def report_routes(self, reportname, docids=None, converter=None, **data): + """ + Расширенный маршрут `/report///` + Добавлена поддержка: + - converter=docx → генерация DOCX + - converter=pdf → конвертация DOCX → PDF (Gotenberg) + """ + _logger.info("[ROUTE] report_routes() called: reportname=%s converter=%s docids=%s", + reportname, converter, docids) + + context, payload, docids_list = self._prepare_docx_report_context(docids, data) + + report = self._get_docx_report_from_name(reportname) + + # ----------------------- + # 1) DOCX генерация + # ----------------------- + if converter == "docx": + _logger.info("[ROUTE] DOCX branch for report=%s", reportname) + + docx_content = report.with_context(context)._render_docx_docx( + docids_list, data=payload + ) + headers = [ + ( + "Content-Type", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ), + ] + return request.make_response(docx_content, headers=headers) + + # ----------------------- + # 2) PDF генерация из DOCX + # ----------------------- + if converter == "pdf" and "docx" in (report.report_type or ""): + _logger.info("[ROUTE] PDF branch for report=%s docids=%s", reportname, docids_list) + + pdf_result = report.with_context(context)._render_docx_pdf( + docids_list, data=payload + ) + + # Может быть либо bytes, либо (bytes, ext) + if isinstance(pdf_result, tuple): + pdf_content = pdf_result[0] + else: + pdf_content = pdf_result + + headers = [ + ("Content-Type", "application/pdf"), + ("Content-Length", len(pdf_content)), + ] + return request.make_response(pdf_content, headers=headers) + + return super().report_routes( + reportname, docids, converter, **data + ) + + def _get_docx_output_filename(self, report, docids, extension): + """ + Возвращает финальное имя файла для скачивания DOCX. + + Приоритет: + 1) docx.template.filename_pattern (если существует docx.template) + 2) report.print_report_name (как fallback, если оно всё же задано) + 3) report.name + + Ожидается, что выражение возвращает строку БЕЗ расширения (.docx). + """ + filename = "%s.%s" % (report.name, extension) + + template = request.env["docx.template"].sudo().search( + [("report_id", "=", report.id)], limit=1 + ) + + pattern = None + if template and template.filename_pattern: + pattern = template.filename_pattern + elif report.print_report_name: + pattern = report.print_report_name + + if not pattern or not docids: + return filename + + ids = [int(x) for x in docids.split(",") if x.isdigit()] + if len(ids) != 1: + return filename + + obj = request.env[report.model].browse(ids) + + try: + report_name = safe_eval( + pattern, + {"object": obj, "time": time}, + ) + except Exception as e: + return filename + + if not isinstance(report_name, str): + return filename + + clean = report_name.strip() + if not clean: + return filename + + clean = re.sub(r"\.(docx?|pdf)$", "", clean, flags=re.IGNORECASE) + + return "%s.%s" % (clean, extension) + + @route() + def report_download(self, data, token, context=None): + """ + Обрабатывает запрос на скачивание файла отчета. + Расширен для: + - docx-docx (DOCX) + - docx-pdf (PDF из DOCX) + """ + _logger.info("[REPORT DOWNLOAD] data=%s, token=%s", data, token) + + requestcontent = json_loads(data) + url, type_ = requestcontent[0], requestcontent[1] + + try: + if type_ in ["docx-docx", "docx-pdf"]: + converter = "docx" if type_ == "docx-docx" else "pdf" + extension = "docx" if type_ == "docx-docx" else "pdf" + + pattern = "/report/%s/" % ("docx" if type_ == "docx-docx" else "pdf") + reportname = url.split(pattern)[1].split("?")[0] + + docids = None + if "/" in reportname: + reportname, docids = reportname.split("/") + + _logger.info( + "[REPORT DOWNLOAD] type=%s converter=%s extension=%s reportname=%s docids=%s", + type_, converter, extension, reportname, docids, + ) + + if docids: + response = self.report_routes( + reportname, docids=docids, converter=converter, context=context + ) + + else: + query_data = {} + if "?" in url: + query_data = dict(url_decode(url.split("?")[1]).items()) + + if "context" in query_data: + base_ctx = json_loads(context or "{}") if context else {} + data_context = json_loads(query_data.pop("context")) + context = json_dumps({**base_ctx, **data_context}) + + response = self.report_routes( + reportname, converter=converter, context=context, **query_data + ) + + report = self._get_docx_report_from_name(reportname) + filename = self._get_docx_output_filename(report, docids, extension) + + response.headers.add( + "Content-Disposition", content_disposition(filename) + ) + return response + + else: + return super().report_download( + data, context=context + ) + + except Exception as e: + _logger.exception("[REPORT DOWNLOAD] ERROR: %s", e) + se = _serialize_exception(e) + error = {"code": 200, "message": "Odoo Server Error", "data": se} + return request.make_response(html_escape(json_dumps(error))) diff --git a/docx_report/demo/demo.xml b/docx_report/demo/demo.xml new file mode 100644 index 00000000..4ece8750 --- /dev/null +++ b/docx_report/demo/demo.xml @@ -0,0 +1,18 @@ + + + + + + + + Печать договора + docx-docx + account.move + docx + + + object.name or 'contract' + + + + diff --git a/docx_report/models/__init__.py b/docx_report/models/__init__.py new file mode 100644 index 00000000..bcb49838 --- /dev/null +++ b/docx_report/models/__init__.py @@ -0,0 +1,6 @@ +from . import docx_template +from . import ir_model +from . import ir_actions_report +from . import docx_custom_field +from . import ir_model_fields +from . import docx_template_mixin \ No newline at end of file diff --git a/docx_report/models/docx_custom_field.py b/docx_report/models/docx_custom_field.py new file mode 100644 index 00000000..c79b2b36 --- /dev/null +++ b/docx_report/models/docx_custom_field.py @@ -0,0 +1,41 @@ +from odoo import api, fields, models, _ + + +class DocxCustomField(models.Model): + _name = "docx.custom.field" + _description = "Кастомная переменная для DOCX-шаблона" + + report_id = fields.Many2one( + "ir.actions.report", + string="DOCX-отчёт", + required=True, + ondelete="cascade", + ) + + technical_name = fields.Char( + string="Техническое имя", + required=True, + help="Имя переменной, используемое в шаблоне", + ) + + name = fields.Char( + string="Название", + required=True, + help="Имя для интерфейса.", + ) + + value_python = fields.Text( + string="Значение (Python)", + required=True, + help=( + "Python-выражение, которое будет вычислено в контексте отчёта.\n" + ), + ) + + _sql_constraints = [ + ( + "uniq_report_technical_name", + "unique(report_id, technical_name)", + "Техническое имя кастомной переменной должно быть уникально в рамках одного отчёта.", + ) + ] diff --git a/docx_report/models/docx_template.py b/docx_report/models/docx_template.py new file mode 100644 index 00000000..55af7df2 --- /dev/null +++ b/docx_report/models/docx_template.py @@ -0,0 +1,325 @@ +import re +import zipfile +from io import BytesIO +from base64 import b64decode + +from logging import getLogger + +_logger = getLogger(__name__) + + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +class DocxTemplate(models.Model): + """ + Высокоуровневый DOCX-шаблон договора. + + Все технические поля (name, report_type, model, + report_docx_template, print_report_name и т.д.) + берём напрямую из ir.actions.report через _inherits. + """ + _name = "docx.template" + _description = "DOCX-шаблон договора" + _inherits = {"ir.actions.report": "report_id"} + + report_id = fields.Many2one( + "ir.actions.report", + string="Действие отчёта", + required=True, + ondelete="cascade", + ) + + filename_pattern = fields.Char( + string="Шаблон имени файла", + help=( + "Python-выражение, вычисляемое при скачивании DOCX.\n" + "Должно вернуть строку БЕЗ расширения.\n" + "Доступные переменные:\n" + " - object: запись, для которой печатается отчёт\n" + " - time: модуль time из Python" + ), + ) + + docx_output_type = fields.Selection( + selection=[ + ("docx", "DOCX"), + ], + string="Формат вывода", + default="docx", + required=True, + ) + + docx_model_id = fields.Many2one( + "ir.model", + string="Модель документа", + ondelete="set null" + ) + + available_field_ids = fields.Many2many( + "ir.model.fields", + string="Доступные поля (подсказка)", + compute="_compute_available_field_ids", + readonly=True, + ) + + global_template = fields.Boolean( + string="Глобальный", + default=True, + help="Если включено, шаблон доступен глобально", + ) + + report_docx_template_filename = fields.Char( + string="Имя файла шаблона", + help="Имя загруженного DOCX-шаблона. Не влияет на имя выводимого файла.", + ) + + hint_model_id = fields.Many2one( + "ir.model", + string="Модель для подсказки полей", + help=( + "Используется только как подсказка при создании шаблона.\n" + "На реальную модель отчёта не влияет." + ), + ) + + def action_bind_to_actions(self): + """Создать contextual action (binding) для каждого шаблона.""" + for template in self: + template.report_id.create_action() + return True + + def action_unbind_from_actions(self): + """Удалить contextual action (binding) для каждого шаблона.""" + for template in self: + template.report_id.unlink_action() + return True + + + @api.depends("hint_model_id", "docx_model_id") + def _compute_available_field_ids(self): + """ + Это всего лишь подсказка для конструктора шаблонов. + + Берём поля: + - в первую очередь для hint_model_id + - если hint_model_id не задана — для docx_model_id + """ + Fields = self.env["ir.model.fields"] + for rec in self: + model_rec = rec.hint_model_id or rec.docx_model_id + if model_rec: + rec.available_field_ids = Fields.search( + [("model_id", "=", model_rec.id)], + order="name", + ) + else: + rec.available_field_ids = Fields.browse() + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + output_type = vals.get("docx_output_type") + if output_type and not vals.get("report_type"): + if output_type == "docx": + vals["report_type"] = "docx-docx" + elif output_type == "pdf": + vals["report_type"] = "docx-pdf" + elif output_type == "docx_pdf": + vals["report_type"] = "docx-docx" + + model_id = vals.get("docx_model_id") + if model_id and not vals.get("model"): + model_rec = self.env["ir.model"].browse(model_id) + vals["model"] = model_rec.model or False + + return super().create(vals_list) + + def write(self, vals): + if "docx_output_type" in vals and "report_type" not in vals: + out = vals["docx_output_type"] + if out == "docx": + vals["report_type"] = "docx-docx" + elif out == "pdf": + vals["report_type"] = "docx-pdf" + elif out == "docx_pdf": + vals["report_type"] = "docx-docx" + + if "docx_model_id" in vals and "model" not in vals: + model_rec = self.env["ir.model"].browse(vals["docx_model_id"]) + vals["model"] = model_rec.model or False + return super().write(vals) + + def action_validate_docx_template(self): + self.ensure_one() + _logger.info("[DOCX VALIDATION] --- START ---") + + if not self.report_docx_template: + raise UserError(_("Не загружен DOCX-шаблон.")) + if not self.docx_model_id: + raise UserError(_("Заполните поле 'Модель документа'.")) + + try: + raw = b64decode(self.report_docx_template) + zf = zipfile.ZipFile(BytesIO(raw)) + except Exception as e: + raise UserError(_("Файл шаблона повреждён или не является DOCX: %s") % e) + + pattern = re.compile(r"{{\s*(.*?)\s*}}", re.DOTALL) + tag_pattern = re.compile(r"<[^>]+>") + loop_pattern = re.compile( + r"{%\s*for\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+in\s+.*?%}", re.DOTALL + ) + + expressions = set() + loop_var_names = set() + + for name in zf.namelist(): + if not name.startswith("word/") or not name.endswith(".xml"): + continue + xml = zf.read(name).decode("utf-8", errors="ignore") + + for match in pattern.finditer(xml): + expr = match.group(1) + expr = tag_pattern.sub("", expr) + expr = expr.strip() + if expr: + expressions.add(expr) + + for m in loop_pattern.finditer(xml): + var_name = m.group(1) + loop_var_names.add(var_name) + + if not expressions: + return self._validation_notification( + _("В шаблоне не найдено ни одной переменной {{ }}."), "info" + ) + + allowed_roots = { + "env", "model", "record", "records", "docs", "user", + "res_company", "website", "web_base_url", "time", + "context_timestamp", "UserError", "Warning", "format_number", + } + + root_model_map = { + "record": self.docx_model_id.model, + "records": self.docx_model_id.model, + "docs": self.docx_model_id.model, + "user": "res.users", + "res_company": "res.company", + } + + custom_var_names = ( + set(self.docx_custom_field_ids.mapped("technical_name")) + if hasattr(self, "docx_custom_field_ids") + else set() + ) + + relational_types = {"many2one", "one2many", "many2many"} + missing = set() + + + func_stop_patterns = ("mapped", "filtered", "sorted", "search") + + for expr in expressions: + core = expr.split("|", 1)[0] + for sep in (" if ", " or ", " and ", " else "): + core = core.split(sep, 1)[0] + core = core.strip() + + for func in func_stop_patterns: + core = re.split(rf"\.{func}\s*\(", core)[0] + + if not core: + continue + + match = re.search(r'[a-zA-Z_][a-zA-Z0-9_.\[\]\'\"]*', core) + if not match: + continue + + token = match.group(0) + + token = re.sub(r"\['([^']+)']", r".\1", token) + token = re.sub(r'\["([^"]+)"]', r".\1", token) + + parts = token.split(".") + root = parts[0] + + if root in custom_var_names and root not in allowed_roots: + continue + if root in loop_var_names and root not in allowed_roots and root not in custom_var_names: + continue + if root not in allowed_roots: + missing.add(root) + continue + + model_name = root_model_map.get(root) + + if not model_name: + continue + + current_model = self.env[model_name] + + path = root + + for name in parts[1:]: + name_stripped = name.strip() + + if any( + name_stripped.startswith(f"{func}(") or name_stripped == func + for func in func_stop_patterns + ): + break + + if current_model is None: + break + + field = current_model._fields.get(name_stripped) + if not field: + _logger.warning( + "[DOCX VALIDATION] MISSING field: %s.%s (model=%s). " + "Available fields: %s", + path, + name_stripped, + current_model._name, + ", ".join(sorted(current_model._fields.keys())), + ) + missing.add(f"{path}.{name_stripped}") + break + + path = f"{path}.{name_stripped}" + + if field.type in relational_types and field.comodel_name: + _logger.info( + "[DOCX VALIDATION] Following relation → %s", field.comodel_name + ) + current_model = self.env[field.comodel_name] + else: + current_model = None + + _logger.info("[DOCX VALIDATION] ----- END CHECK -----") + + if missing: + _logger.warning("[DOCX VALIDATION] Missing vars: %s", missing) + text = "\n".join(sorted(missing)) + raise UserError( + _("Обнаружены неизвестные переменные или поля в шаблоне для модели '%s':\n%s") + % (self.docx_model_id.model, text) + ) + + return self._validation_notification( + _("Все переменные в шаблоне валидны для модели %s.") % self.docx_model_id.model, + "success", + ) + + def _validation_notification(self, message, type="success"): + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("Валидация DOCX-шаблона"), + "message": message, + "type": type, + "sticky": False, + }, + } diff --git a/docx_report/models/docx_template_mixin.py b/docx_report/models/docx_template_mixin.py new file mode 100644 index 00000000..78945e0c --- /dev/null +++ b/docx_report/models/docx_template_mixin.py @@ -0,0 +1,13 @@ +from odoo import models, fields, _ + + +class DocxTemplateMixin(models.AbstractModel): + _name = "docx.template.mixin" + _description = "Mixin: DOCX template link" + + docx_template_id = fields.Many2one( + "docx.template", + string=_("DOCX шаблон"), + domain=[("global_template", "=", False)], + help="DOCX-шаблон, используемый по умолчанию для данного объекта.", + ) diff --git a/docx_report/models/ir_actions_report.py b/docx_report/models/ir_actions_report.py new file mode 100644 index 00000000..b0beb2bf --- /dev/null +++ b/docx_report/models/ir_actions_report.py @@ -0,0 +1,364 @@ +from base64 import b64decode +from bs4 import BeautifulSoup +from collections import OrderedDict +from io import BytesIO +from logging import getLogger +from markupsafe import Markup + + +from docx import Document +from docxcompose.composer import Composer +from docxtpl import DocxTemplate + +from odoo import _, api, fields, models +from odoo.exceptions import AccessError, UserError +from odoo.http import request +from odoo.tools.safe_eval import safe_eval, time + +_logger = getLogger(__name__) + +class IrActionsReport(models.Model): + _inherit = "ir.actions.report" + + docx_custom_field_ids = fields.One2many( + "docx.custom.field", + "report_id", + string="Кастомные переменные DOCX", + ) + + report_name = fields.Char( + compute="_compute_report_name", + inverse="_inverse_report_name", + store=True, + required=False, + ) + report_type = fields.Selection( + selection_add=[("docx-docx", "DOCX")], + ondelete={"docx-docx": "cascade"}, + ) + report_docx_template = fields.Binary( + string="Файл шаблона", + ) + + @api.depends("report_type", "model") + def _compute_report_name(self): + for record in self: + if ( + record.report_type in ["docx-docx"] + and record.model + and record.id + ): + record.report_name = "%s-docx_report+%s" % (record.model, record.id) + else: + record.report_name = False + + def _inverse_report_name(self): + """TODO: write this method""" + pass + + def retrieve_attachment(self, record): + """ + Searc for existing report file in record's attachments by fields: + 1. name + 2. res_model + 3. res_id + """ + result = super().retrieve_attachment(record) + if result: + if self.report_type == "docx-docx": + result = ( + result.filtered( + lambda r: r.mimetype + == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + ) + or None + ) + return result + + @api.model + def _render_docx_docx(self, res_ids=None, data=None): + """ + Prepares the data for report file rendering, calls for the render method + and handle rendering result. + """ + if not data: + data = {} + data.setdefault("report_type", "docx") + + # access the report details with sudo() but evaluation context as current user + self_sudo = self.sudo() + + save_in_attachment = OrderedDict() + # Maps the streams in `save_in_attachment` back to the records they came from + stream_record = dict() + if res_ids: + Model = self.env[self_sudo.model] + record_ids = Model.browse(res_ids) + docx_record_ids = Model + if self_sudo.attachment: + for record_id in record_ids: + attachment = self_sudo.retrieve_attachment(record_id) + if attachment: + # stream = self_sudo._retrieve_stream_from_attachment(attachment) + stream = BytesIO(attachment.raw) + save_in_attachment[record_id.id] = stream + stream_record[stream] = record_id + if not self_sudo.attachment_use or not attachment: + docx_record_ids += record_id + else: + docx_record_ids = record_ids + res_ids = docx_record_ids.ids + + if save_in_attachment and not res_ids: + _logger.info("The DOCS report has been generated from attachment.") + return self_sudo._post_docx(save_in_attachment), "docx" + + docx_contents = [] + for record_id in res_ids: + docx_content = self._render_docx([record_id], data=data) + docx_contents.append(docx_content) + + if res_ids: + _logger.info( + "The DOCS report has been generated for model: %s, records %s." + % (self_sudo.model, str(res_ids)) + ) + return ( + self_sudo._post_docx( + save_in_attachment, docx_contents=docx_contents, res_ids=res_ids + ), + "docx", + ) + return docx_contents, "docx" + + def _post_docx(self, save_in_attachment, docx_contents=None, res_ids=None): + """ + Adds generated file in attachments. + """ + + def close_streams(streams): + for stream in streams: + try: + stream.close() + except Exception: + pass + + if len(save_in_attachment) == 1 and not docx_contents: + return list(save_in_attachment.values())[0].getvalue() + + streams = [] + if docx_contents: + record_map = { + r.id: r + for r in self.env[self.model].browse( + [res_id for res_id in res_ids if res_id] + ) + } + if not record_map or not self.attachment: + streams.extend(docx_contents) + else: + for res_id, docx_content in zip(res_ids, docx_contents): + if res_id in record_map and not res_id in save_in_attachment: + new_stream = self._postprocess_docx_report( + record_map[res_id], docx_content + ) + if new_stream and new_stream != docx_content: + close_streams([docx_content]) + docx_content = new_stream + streams.append(docx_content) + if self.attachment_use: + for stream in save_in_attachment.values(): + streams.append(stream) + if len(streams) == 1: + result = streams[0].getvalue() + else: + try: + merged_stream = self._merge_docx(streams) + result = merged_stream.getvalue() + except Exception as e: + _logger.exception(e) + raise UserError( + _("One of the documents you try to merge caused failure.") + ) + + close_streams(streams) + return result + + def _postprocess_docx_report(self, record, buffer): + """ + Creates the record in the "ir.attachment" model. + """ + attachment_name = safe_eval(self.attachment, {"object": record, "time": time}) + if not attachment_name: + return None + attachment_vals = { + "name": attachment_name, + "raw": buffer.getvalue(), + "res_model": self.model, + "res_id": record.id, + "type": "binary", + } + try: + self.env["ir.attachment"].create(attachment_vals) + except AccessError: + _logger.info( + "Cannot save DOCX report %r as attachment", attachment_vals["name"] + ) + else: + _logger.info( + "The DOCX document %s is now saved in the database", + attachment_vals["name"], + ) + return buffer + + @staticmethod + def _merge_docx(streams): + """ + Joins several docx files into one with page breaks between them. + """ + if not streams: + return None + + merged_document = Document() + composer = Composer(merged_document) + + for stream in streams: + document = Document(stream) + + if composer.doc.paragraphs: + composer.doc.add_page_break() + + composer.append(document) + + merged_stream = BytesIO() + merged_document.save(merged_stream) + merged_stream.seek(0) + + return merged_stream + + def _render_docx(self, docids: list, data: dict = None): + """ + Receive the data for rendering and calls for it. + + docids: list of record's ids for which report is generated. + data: dict, conains "context", "report_type". + """ + if not data: + data = {} + data.setdefault("report_type", "docx") + data = self._get_rendering_context( + self, docids, data + ) # self contains current record of ir.actions.report model. + return self._render_docx_template(self.report_docx_template, values=data) + + def _render_docx_template(self, template: bytes, values: dict = None): + """ + docx file rendering itself. + """ + self.ensure_one() + + if values is None: + values = {} + + context = dict(self.env.context, inherit_branding=False) + # Browse the user instead of using the sudo self.env.user + user = self.env["res.users"].browse(self.env.uid) + website = None + if request and hasattr(request, "website"): + if request.website is not None: + website = request.website + context = dict( + context, + translatable=context.get("lang") + != request.env["ir.http"]._get_default_lang().code, + ) + + # базовый контекст, который и так шёл в шаблон + values.update( + record=values["docs"], + time=time, + context_timestamp=lambda t: fields.Datetime.context_timestamp( + self.with_context(tz=user.tz), t + ), + user=user, + res_company=user.company_id, + website=website, + web_base_url=self.env["ir.config_parameter"] + .sudo() + .get_param("web.base.url", default=""), + ) + + # --------- КАСТОМНЫЕ ПЕРЕМЕННЫЕ --------- + # record = текущая запись модели отчёта (partner.contract.customer, docx.test.contract и т.д.) + record = values.get("record") + # контекст для safe_eval кастомных выражений + eval_context = { + "env": self.env, + "user": user, + "record": record, + "docs": record, # чтобы можно было писать record.* или docs.* + "time": time, + "context": self.env.context, + "mode": "python", # как ты и просил + } + + custom_values = {} + for custom in self.docx_custom_field_ids: + tech = (custom.technical_name or "").strip() + if not tech: + continue + try: + result = safe_eval(custom.value_python or "", eval_context) + except Exception as e: + # Явная ошибка в кастомной переменной — не молчим + raise UserError( + _("Ошибка при вычислении кастомной переменной '%s': %s") + % (tech, e) + ) + custom_values[tech] = result + _logger.info( + "[DOCX CUSTOM] %s = %r (report id %s)", + tech, + result, + self.id, + ) + + # кладём их в общий контекст рендера: + # в шаблоне можно писать {{ our_company }} и т.п. + values.update(custom_values) + # --------- / КАСТОМНЫЕ ПЕРЕМЕННЫЕ --------- + + # Преобразование Html/Markup полей в plain text для docs.* + record_to_render = values["record"] + docs = { + key: record_to_render[key] + for key in record_to_render._fields.keys() + if not isinstance(record_to_render[key], fields.Markup) + } + docs.update( + { + key: self._parse_markup(record_to_render[key]) + for key in record_to_render._fields.keys() + if isinstance(record_to_render[key], fields.Markup) + } + ) + values["docs"] = docs + + # Собственно рендер DOCX + docx_content = BytesIO() + with BytesIO(b64decode(template)) as template_file: + doc = DocxTemplate(template_file) + doc.render(values) + doc.save(docx_content) + docx_content.seek(0) + return docx_content + + @staticmethod + def _parse_markup(markup_data: Markup): + """ + Extracts data from field of Html type and returns them in text format, + without html tags. + """ + soup = BeautifulSoup(markup_data.__str__()) + data_arr = list(soup.strings) + return "\n".join(data_arr) diff --git a/docx_report/models/ir_model.py b/docx_report/models/ir_model.py new file mode 100644 index 00000000..7927242d --- /dev/null +++ b/docx_report/models/ir_model.py @@ -0,0 +1,13 @@ +from odoo import models, api + + +class IrModel(models.Model): + _inherit = "ir.model" + + @api.depends('model', 'name') + def _compute_display_name(self): + super()._compute_display_name() + + if self.env.context.get('from_docx_template'): + for record in self: + record.display_name = record.model or record.name \ No newline at end of file diff --git a/docx_report/models/ir_model_fields.py b/docx_report/models/ir_model_fields.py new file mode 100644 index 00000000..887b7c64 --- /dev/null +++ b/docx_report/models/ir_model_fields.py @@ -0,0 +1,26 @@ +from odoo import api, fields, models + + +class IrModelFields(models.Model): + _inherit = "ir.model.fields" + + docx_type_label = fields.Char( + string="Тип для DOCX", + compute="_compute_docx_type_label", + readonly=True, + ) + + @api.depends("ttype", "relation", "selection_ids.value") + def _compute_docx_type_label(self): + for field in self: + t = field.ttype or "" + if field.relation and field.ttype in ("many2one", "one2many", "many2many"): + t = f"{field.ttype} ({field.relation})" + + elif field.ttype == "selection": + values = field.selection_ids.mapped("value") + if values: + t = f"selection ({', '.join(values)})" + else: + t = "selection" + field.docx_type_label = t diff --git a/docx_report/security/ir.model.access.csv b/docx_report/security/ir.model.access.csv new file mode 100644 index 00000000..ccc469b9 --- /dev/null +++ b/docx_report/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_docx_template_user,docx.template user,model_docx_template,base.group_user,1,0,0,0 +access_docx_template_manager,docx.template manager,model_docx_template,base.group_system,1,1,1,1 +access_docx_custom_field_admin,access_docx_custom_field_admin,model_docx_custom_field,base.group_system,1,1,1,1 \ No newline at end of file diff --git a/docx_report/static/src/docx/report_account_invoice_upd_new_templates.docx b/docx_report/static/src/docx/report_account_invoice_upd_new_templates.docx new file mode 100644 index 00000000..e10546c9 Binary files /dev/null and b/docx_report/static/src/docx/report_account_invoice_upd_new_templates.docx differ diff --git a/docx_report/static/src/docx/report_account_invoice_updn_templates.docx b/docx_report/static/src/docx/report_account_invoice_updn_templates.docx new file mode 100644 index 00000000..4f57a564 Binary files /dev/null and b/docx_report/static/src/docx/report_account_invoice_updn_templates.docx differ diff --git a/docx_report/static/src/docx/report_saleorder_new_template.docx b/docx_report/static/src/docx/report_saleorder_new_template.docx new file mode 100644 index 00000000..7414c772 Binary files /dev/null and b/docx_report/static/src/docx/report_saleorder_new_template.docx differ diff --git a/docx_report/static/src/js/action_manager_report.js b/docx_report/static/src/js/action_manager_report.js new file mode 100644 index 00000000..a71e0e49 --- /dev/null +++ b/docx_report/static/src/js/action_manager_report.js @@ -0,0 +1,52 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { download } from "@web/core/network/download"; + +async function docxHandler(action, options, env) { + let reportType = null; + if (action.report_type === "docx-docx") { + reportType = "docx"; + } else if (action.report_type === "docx-pdf") { + reportType = "pdf"; + } + if (reportType) { + let url = `/report/${reportType}/${action.report_name}`; + const actionContext = action.context || {}; + if (action.data && JSON.stringify(action.data) !== "{}") { + const options = encodeURIComponent(JSON.stringify(action.data)); + const context = encodeURIComponent(JSON.stringify(actionContext)); + url += `?options=${options}&context=${context}`; + } else { + if (actionContext.active_ids) { + url += `/${actionContext.active_ids.join(",")}`; + } + } + + env?.services?.ui?.block?.(); + try { + const template_type = (action.report_type && action.report_type.split("-")[0]) || "docx"; + const type = template_type + "-" + url.split("/")[2]; + await download({ + url: "/report/download", + data: { + data: JSON.stringify([url, type]), + context: JSON.stringify(Object.assign({}, actionContext, env?.services?.user?.context || {})), + }, + }); + } finally { + env?.services?.ui?.unblock?.(); + } + + const onClose = options?.onClose; + if (action.close_on_report_download) { + return env?.services?.action?.doAction({ type: "ir.actions.act_window_close" }, { onClose }); + } else if (onClose) { + onClose(); + } + return Promise.resolve(true); + } + return Promise.resolve(false); +} + +registry.category("ir.actions.report handlers").add("docx_handler", docxHandler); diff --git a/docx_report/static/src/js/contract_docx_print_menu.js b/docx_report/static/src/js/contract_docx_print_menu.js new file mode 100644 index 00000000..e532d83d --- /dev/null +++ b/docx_report/static/src/js/contract_docx_print_menu.js @@ -0,0 +1,90 @@ +/** @odoo-module **/ + +import {FormController} from "@web/views/form/form_controller"; +import {patch} from "@web/core/utils/patch"; + +let docxReportMap = null; +let docxReportMapLoading = false; + +async function loadDocxReportMap(env) { + const orm = env.services.orm; + const templates = await orm.searchRead("docx.template", [], [ + "id", + "report_id", + "global_template", + "docx_model_id", + ]); + + const byReportId = {}; + for (const t of templates) { + const reportId = t.report_id && t.report_id[0]; + if (!reportId) continue; + + byReportId[reportId] = { + templateId: t.id, + globalTemplate: !!t.global_template, + isDocxBased: !!t.docx_model_id, + }; + } + + return { byReportId }; +} + +patch(FormController.prototype, { + get actionMenuItems() { + const items = super.actionMenuItems; + const record = this.model?.root; + + if (!record || !("docx_template_id" in (record.data || {}))) { + return items; + } + + if (!docxReportMap && !docxReportMapLoading) { + docxReportMapLoading = true; + + loadDocxReportMap(this.env) + .then((map) => { + docxReportMap = map; + docxReportMapLoading = false; + }) + .catch((e) => { + docxReportMapLoading = false; + }); + + return items; + } + + if (!docxReportMap) { + return items; + } + + const tplVal = record.data.docx_template_id; + const currentTemplateId = tplVal && tplVal[0]; + const hasTemplate = !!currentTemplateId; + + if (!items.print?.length) { + return items; + } + + items.print = items.print.filter((entry) => { + const reportId = entry.id; + const info = docxReportMap.byReportId[reportId]; + + if (!info || !info.isDocxBased) { + return true; + } + + if (info.globalTemplate) { + return true; + } + + if (!hasTemplate) { + return false; + } + + return info.templateId === currentTemplateId; + }); + + return items; + }, +}); diff --git a/docx_report/tests/__init__.py b/docx_report/tests/__init__.py new file mode 100644 index 00000000..0a8ef833 --- /dev/null +++ b/docx_report/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_docx diff --git a/docx_report/tests/test_docx.py b/docx_report/tests/test_docx.py new file mode 100644 index 00000000..a8d1df9d --- /dev/null +++ b/docx_report/tests/test_docx.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +""" +Tests for docx_report — DOCX template loading. + +Validates: Requirement 13.1 +""" +import base64 +import io +import zipfile + +from odoo.tests.common import TransactionCase +from odoo.tests import tagged + + +def _make_minimal_docx(): + """ + Build a minimal valid DOCX (ZIP) file in memory and return it as base64. + + A DOCX is a ZIP archive containing at minimum: + - [Content_Types].xml + - word/document.xml + - _rels/.rels + """ + buf = io.BytesIO() + with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf: + zf.writestr( + "[Content_Types].xml", + '' + '' + '' + '' + '' + "", + ) + zf.writestr( + "_rels/.rels", + '' + '' + '' + "", + ) + zf.writestr( + "word/document.xml", + '' + '' + "Test" + "", + ) + zf.writestr( + "word/_rels/document.xml.rels", + '' + '' + "", + ) + buf.seek(0) + return base64.b64encode(buf.read()).decode("ascii") + + +@tagged("post_install", "-at_install") +class TestDocxReport(TransactionCase): + """ + Tests for docx.template — DOCX template loading. + + Validates: Requirement 13.1 + """ + + def setUp(self): + super().setUp() + # Resolve the ir.model record for res.partner (a simple, always-present model) + self.ir_model = self.env["ir.model"].search( + [("model", "=", "res.partner")], limit=1 + ) + self.docx_b64 = _make_minimal_docx() + + # ------------------------------------------------------------------ + # Requirement 13.1 — loading a DOCX template saves without errors + # ------------------------------------------------------------------ + + def test_create_docx_template_without_file_saves_ok(self): + """ + Req 13.1 — creating a docx.template record without a template file + (file uploaded later by the user) saves without errors. + """ + template = self.env["docx.template"].create( + { + "name": "Test DOCX Template (no file)", + "report_type": "docx-docx", + "model": "res.partner", + "docx_output_type": "docx", + "docx_model_id": self.ir_model.id, + "global_template": True, + } + ) + self.assertTrue(template.id, "docx.template record should be created with a valid id") + self.assertEqual(template.name, "Test DOCX Template (no file)") + self.assertEqual(template.model, "res.partner") + + def test_load_docx_template_file_saves_ok(self): + """ + Req 13.1 — uploading a DOCX binary into report_docx_template and saving + the docx.template record completes without errors. + """ + template = self.env["docx.template"].create( + { + "name": "Test DOCX Template (with file)", + "report_type": "docx-docx", + "model": "res.partner", + "docx_output_type": "docx", + "docx_model_id": self.ir_model.id, + "global_template": True, + "report_docx_template": self.docx_b64, + "report_docx_template_filename": "test_template.docx", + } + ) + self.assertTrue(template.id, "docx.template record should be created with a valid id") + self.assertTrue( + template.report_docx_template, + "report_docx_template field should contain the uploaded binary", + ) + self.assertEqual( + template.report_docx_template_filename, + "test_template.docx", + "Filename should be stored correctly", + ) + + def test_write_docx_template_file_saves_ok(self): + """ + Req 13.1 — writing a DOCX binary to an existing docx.template record + via write() completes without errors. + """ + template = self.env["docx.template"].create( + { + "name": "Test DOCX Template (write)", + "report_type": "docx-docx", + "model": "res.partner", + "docx_output_type": "docx", + "docx_model_id": self.ir_model.id, + } + ) + # Now upload the template file via write + template.write( + { + "report_docx_template": self.docx_b64, + "report_docx_template_filename": "updated_template.docx", + } + ) + self.assertTrue( + template.report_docx_template, + "report_docx_template should be set after write()", + ) diff --git a/docx_report/views/docx_report.xml b/docx_report/views/docx_report.xml new file mode 100644 index 00000000..2c40752c --- /dev/null +++ b/docx_report/views/docx_report.xml @@ -0,0 +1,76 @@ + + + + + A4 + + A4 + 0 + 0 + Portrait + 7 + 7 + 7 + 7 + + 35 + 75 + + + A4 Landscape + + A4 + 0 + 0 + Landscape + 7 + 7 + 7 + 7 + + 75 + 60 + + + + + + Счет по форме 1С DOCX + sale.order + docx-docx + docx_report.report_order + 'Счет - %s DOCX' % ((object.name or '')+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name)) + + + report + + + + + + Универсальный передаточный документ(УПД) DOCX + account.move + docx-docx + docx_report.report_upd + 'УПД DOCX' + + + report + + + + + + + УПД без печатей DOCX + account.move + docx-docx + docx_report.report_updn + 'УПД без печатей DOCX' + + + report + + + + \ No newline at end of file diff --git a/docx_report/views/docx_template_views.xml b/docx_report/views/docx_template_views.xml new file mode 100644 index 00000000..bd01d761 --- /dev/null +++ b/docx_report/views/docx_template_views.xml @@ -0,0 +1,111 @@ + + + + + docx.template.tree + docx.template + + + + + + + + + + + docx.template.form + docx.template + +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + Шаблоны + docx.template + list,form + + + +
+
diff --git a/docx_report_generation/README.md b/docx_report_generation/README.md new file mode 100644 index 00000000..93ff078a --- /dev/null +++ b/docx_report_generation/README.md @@ -0,0 +1,48 @@ +# DOCX report +Functionality + +Allows you to add docx files to the report model as a source template. +You can get reports based on such a template in docx or pdf format. +Currently, the simultaneous creation of multiple reports is not supported. + +To convert docx -> pdf, an available gutenberg service is required on localhost:8808. +An example of launching a service in docker-compose next to Odoo: + +```yaml +gotenberg: + image: thecodingmachine/gotenberg:6 + restart: unless-stopped + environment: + LOG_LEVEL: INFO + DEFAULT_LISTEN_PORT: 8808 + DISABLE_GOOGLE_CHROME: 1 + DEFAULT_WAIT_TIMEOUT: 30 + MAXIMUM_WAIT_TIMEOUT: 60 +``` + +Creating a report + +The report creates in the same way as the standard Odoo procedure: +1. In Settings -> Technical -> Reports, you need to create a new record. In the record of the report + choose one of the new types: "DOCX" or "DOCX(PDF)". + You do not need to fill in the "Template name" field, but instead download the docx file of the report. + All other fields are filled in the same as in standard Odoo reports. +2. If custom fields are applied in the report template, then you need to create them on the tab + "Custom fields". +3. In the entry of the specified model, an additional item with the name of the created report will appear in the print menu. + Clicking on it will display a wizard in which you can check the values of custom fields before generating the report file. +4. When generating a report from the portal, the file is generated without displaying the wizard. + + +Templates creating + +1. Templates can be created in any text editor that supports the docx format. +2. All formatting of the template is saved in the generated report. +3. Double curly braces are used to insert variables. +4. Access to the Odoo record for which the report generation is called is performed through the "docs" variable, + accessing attributes and methods as in Odoo: {{docs.attribute_name }} +5. It is possible to call the methods available for the entry in "docs", or passed to the context of the report. +6. By default, the report context contains methods of the "report_monetary_helper" module, which can be called directly by name. +7. Custom fields may also be present in the context of the report. + Such fields must be created in the report record. + In the template, custom fields are available by the name specified in the "tech_name" field of the custom field entry. diff --git a/docx_report_generation/__init__.py b/docx_report_generation/__init__.py new file mode 100644 index 00000000..91c5580f --- /dev/null +++ b/docx_report_generation/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/docx_report_generation/__manifest__.py b/docx_report_generation/__manifest__.py new file mode 100644 index 00000000..3ce85e38 --- /dev/null +++ b/docx_report_generation/__manifest__.py @@ -0,0 +1,31 @@ +{ + "name": "DOCX report generation", + "summary": """Printing reports in docx format from docx templates.""", + "description": """ + Adds generation reports from .docx templates like standard Odoo reports + with qweb templates. Standard Odoo reports also available. + For generating .pdf from .docx external service the "Gotenberg" is used, + and it required module for integration with this service: "gotenberg". + If integration module "gotenberg" is absent, or service itself unreachable + there will be only reports in docx format. + + This is the beta version, bugs may be present. + """, + "author": "RYDLAB", + "website": "https://rydlab.ru", + "category": "Technical", + "version": "19.0.2025.11.11", + "license": "LGPL-3", + "depends": ["base", "web", "custom_report_field"], + "external_dependencies": {"python": ["docxcompose", "docxtpl", "bs4"]}, + "data": [ + "views/ir_actions_report_views.xml", + ], + "assets": { + "web.assets_backend": [ + "docx_report_generation/static/src/css/mimetypes.css", + "docx_report_generation/static/src/js/action_manager_report.js", + ], + }, + "images": ["static/description/banner.jpg"], +} diff --git a/docx_report_generation/controllers/__init__.py b/docx_report_generation/controllers/__init__.py new file mode 100644 index 00000000..12a7e529 --- /dev/null +++ b/docx_report_generation/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/docx_report_generation/controllers/main.py b/docx_report_generation/controllers/main.py new file mode 100644 index 00000000..6d479d72 --- /dev/null +++ b/docx_report_generation/controllers/main.py @@ -0,0 +1,128 @@ +from json import dumps as json_dumps, loads as json_loads +from werkzeug.urls import url_decode + +from odoo.http import ( + content_disposition, + request, + route, + serialize_exception as _serialize_exception, +) +from odoo.tools import html_escape +from odoo.tools.safe_eval import safe_eval, time + +from odoo.addons.web.controllers.report import ReportController + + +class DocxReportController(ReportController): + @route() + def report_routes(self, reportname, docids=None, converter=None, **data): + """ + Запускает генерацию файла отчета и возвращает его + """ + report = request.env["ir.actions.report"]._get_report_from_name(reportname) + context = dict(request.env.context) + _data = dict() + _docids = [int(i) for i in docids.split(",")] if docids else [] + if data.get("options"): + _data.update(json_loads(data.pop("options"))) + if data.get("context"): + # Ignore 'lang' here, because the context in data is the one from the webclient *but* if + # the user explicitely wants to change the lang, this mechanism overwrites it. + _data["context"] = json_loads(data["context"]) + if _data["context"].get("lang") and not _data.get("force_context_lang"): + del _data["context"]["lang"] + context.update(_data["context"]) + if converter == "docx": + docx = report.with_context(context)._render_docx_docx(_docids, data=_data) + docxhttpheaders = [ + ( + "Content-Type", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ), + ] + return request.make_response(docx, headers=docxhttpheaders) + elif converter == "pdf" and report.report_type == "docx": + pdf = report.with_context(context)._render_docx_pdf(_docids, data=_data) + pdfhttpheaders = [ + ( + "Content-Type", + "application/pdf", + ), + ("Content-Length", len(pdf[0])), + ] + return request.make_response(pdf, headers=pdfhttpheaders) + else: + return super(DocxReportController, self).report_routes( + reportname, docids, converter, **data + ) + + @route() + def report_download(self, data, token, context=None): + """ + Обрабатывает запрос на скачивание файла отчета + """ + requestcontent = json_loads(data) + url, type = requestcontent[0], requestcontent[1] + try: + if type in ["docx-docx", "docx-pdf"]: + converter = "docx" if type == "docx-docx" else "pdf" + extension = "docx" if type == "docx-docx" else "pdf" + + pattern = "/report/%s/" % ("docx" if type == "docx-docx" else "pdf") + reportname = url.split(pattern)[1].split("?")[0] + + docids = None + if "/" in reportname: + reportname, docids = reportname.split("/") + + if docids: + # Generic report: + response = self.report_routes( + reportname, docids=docids, converter=converter, context=context + ) + else: + # Particular report: + data = dict( + url_decode(url.split("?")[1]).items() + ) # decoding the args represented in JSON + if "context" in data: + context, data_context = json_loads(context or "{}"), json_loads( + data.pop("context") + ) + context = json_dumps({**context, **data_context}) + response = self.report_routes( + reportname, converter=converter, context=context, **data + ) + + report = request.env["ir.actions.report"]._get_report_from_name( + reportname + ) + filename = "%s.%s" % (report.name, extension) + + if docids: + ids = [int(x) for x in docids.split(",")] + obj = request.env[report.model].browse(ids) + if report.print_report_name and not len(obj) > 1: + try: + report_name = safe_eval( + report.print_report_name, {"object": obj, "time": time} + ) + except Exception: + # print_report_name может быть просто именем файла, а не Python-выражением + import re as _re + report_name = _re.sub(r'\.(docx?|pdf)$', '', report.print_report_name, flags=_re.IGNORECASE) + filename = "%s.%s" % (report_name, extension) + response.headers.add( + "Content-Disposition", content_disposition(filename) + ) + # token is dummy in 15 version + # response.set_cookie("fileToken", token) + return response + else: + return super(DocxReportController, self).report_download( + data, token, context=context + ) + except Exception as e: + se = _serialize_exception(e) + error = {"code": 200, "message": "Odoo Server Error", "data": se} + return request.make_response(html_escape(json_dumps(error))) diff --git a/docx_report_generation/i18n/docx_report.pot b/docx_report_generation/i18n/docx_report.pot new file mode 100644 index 00000000..2912961e --- /dev/null +++ b/docx_report_generation/i18n/docx_report.pot @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * docx_report +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-29 08:24+0000\n" +"PO-Revision-Date: 2022-12-29 08:24+0000\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: docx_report +#: model:ir.model.fields.selection,name:docx_report.selection__ir_actions_report__report_type__docx-docx +msgid "DOCX" +msgstr "" + +#. module: docx_report +#: model:ir.model.fields.selection,name:docx_report.selection__ir_actions_report__report_type__docx-pdf +msgid "DOCX(PDF)" +msgstr "" + +#. module: docx_report +#. odoo-python +#: code:addons/docx_report/models/ir_actions_report.py:0 +#, python-format +msgid "" +"Gotenberg converting service not available. The PDF can not be created." +msgstr "" + +#. module: docx_report +#. odoo-python +#: code:addons/docx_report/models/ir_actions_report.py:0 +#, python-format +msgid "One of the documents you try to merge caused failure." +msgstr "" + +#. module: docx_report +#: model:ir.model,name:docx_report.model_ir_actions_report +msgid "Report Action" +msgstr "" + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_type +msgid "Report Type" +msgstr "" + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_docx_template +msgid "Report docx template" +msgstr "" + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_name +msgid "Template Name" +msgstr "" + +#. module: docx_report +#: model:ir.model.fields,help:docx_report.field_ir_actions_report__report_type +msgid "" +"The type of the report that will be rendered, each one having its own " +"rendering method. HTML means the report will be opened directly in your " +"browser PDF means the report will be rendered using Wkhtmltopdf and " +"downloaded by the user." +msgstr "" diff --git a/docx_report_generation/i18n/ru.po b/docx_report_generation/i18n/ru.po new file mode 100644 index 00000000..3007c1f1 --- /dev/null +++ b/docx_report_generation/i18n/ru.po @@ -0,0 +1,75 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * docx_report +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-29 08:24+0000\n" +"PO-Revision-Date: 2022-12-29 08:24+0000\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: docx_report +#: model:ir.model.fields.selection,name:docx_report.selection__ir_actions_report__report_type__docx-docx +msgid "DOCX" +msgstr "DOCX" + +#. module: docx_report +#: model:ir.model.fields.selection,name:docx_report.selection__ir_actions_report__report_type__docx-pdf +msgid "DOCX(PDF)" +msgstr "DOCX(PDF)" + +#. module: docx_report +#. odoo-python +#: code:addons/docx_report/models/ir_actions_report.py:0 +#, python-format +msgid "" +"Gotenberg converting service not available. The PDF can not be created." +msgstr "" +"Файл PDF не может быть создан, так как сервис конвертации Gotenberg не доступен." + +#. module: docx_report +#. odoo-python +#: code:addons/docx_report/models/ir_actions_report.py:0 +#, python-format +msgid "One of the documents you try to merge caused failure." +msgstr "Один из документов, которые вы пытаетесь соединить, вызывает ошибку." + +#. module: docx_report +#: model:ir.model,name:docx_report.model_ir_actions_report +msgid "Report Action" +msgstr "Действие для отчета." + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_type +msgid "Report Type" +msgstr "Тип отчета" + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_docx_template +msgid "Report docx template" +msgstr "Шаблон для отчета docx" + +#. module: docx_report +#: model:ir.model.fields,field_description:docx_report.field_ir_actions_report__report_name +msgid "Template Name" +msgstr "Имя шаблона" + +#. module: docx_report +#: model:ir.model.fields,help:docx_report.field_ir_actions_report__report_type +msgid "" +"The type of the report that will be rendered, each one having its own " +"rendering method. HTML means the report will be opened directly in your " +"browser PDF means the report will be rendered using Wkhtmltopdf and " +"downloaded by the user." +msgstr "" +"Тип генерируемого отчета. Каждый тип имеет свой собственный" +" метод генерации. HTML означает, что отчет будет открыт непосредственно в" +" вашем браузере, PDF означает, что отчет будет сгенерирован с помощью " +"Wkhtmltopdf и загружен пользователем." diff --git a/docx_report_generation/models/__init__.py b/docx_report_generation/models/__init__.py new file mode 100644 index 00000000..a248cf21 --- /dev/null +++ b/docx_report_generation/models/__init__.py @@ -0,0 +1 @@ +from . import ir_actions_report diff --git a/docx_report_generation/models/ir_actions_report.py b/docx_report_generation/models/ir_actions_report.py new file mode 100644 index 00000000..f54f0e3c --- /dev/null +++ b/docx_report_generation/models/ir_actions_report.py @@ -0,0 +1,478 @@ +from base64 import b64decode +from bs4 import BeautifulSoup +from collections import OrderedDict +from io import BytesIO +from logging import getLogger + +from docx import Document +from docxcompose.composer import Composer +from docxtpl import DocxTemplate +from requests import codes as codes_request, post as post_request +from requests.exceptions import RequestException + +from odoo import _, api, fields, models +from odoo.exceptions import AccessError, UserError +from odoo.http import request +from odoo.tools.safe_eval import safe_eval, time + +try: + from odoo.addons.gotenberg.service.utils import ( + get_auth, # noqa + convert_pdf_from_office_url, # noqa + check_gotenberg_installed, # noqa + ) + + gotenberg_imported = True +except ImportError: + gotenberg_imported = False + +_logger = getLogger(__name__) + + +class IrActionsReport(models.Model): + _inherit = "ir.actions.report" + + report_name = fields.Char( + compute="_compute_report_name", + inverse="_inverse_report_name", + store=True, + required=False, + ) + report_type = fields.Selection( + selection_add=[("docx-docx", "DOCX"), ("docx-pdf", "DOCX(PDF)")], + ondelete={"docx-docx": "cascade", "docx-pdf": "cascade"}, + ) + report_docx_template = fields.Binary( + string="Report docx template", + ) + + @api.depends("report_type", "model") + def _compute_report_name(self): + for record in self: + if ( + record.report_type in ["docx-docx", "docx-pdf"] + and record.model + and record.id + ): + record.report_name = "%s-docx_report+%s" % (record.model, record.id) + else: + record.report_name = False + + def _inverse_report_name(self): + """TODO: write this method""" + pass + + def retrieve_attachment(self, record): + """ + Searc for existing report file in record's attachments by fields: + 1. name + 2. res_model + 3. res_id + """ + result = super().retrieve_attachment(record) + if result: + if self.report_type == "docx-docx": + result = ( + result.filtered( + lambda r: r.mimetype + == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + ) + or None + ) + elif self.report_type == "docx-pdf": + result = ( + result.filtered(lambda r: r.mimetype == "application/pdf") or None + ) + return result + + @api.model + def _render_docx_pdf(self, res_ids=None, data=None): + """ + Prepares the data for report file rendering, calls for the render method + and handle rendering result. + """ + if not data: + data = {} + data.setdefault("report_type", "pdf") + + # access the report details with sudo() but evaluation context as current user + self_sudo = self.sudo() + + save_in_attachment = OrderedDict() + # Maps the streams in `save_in_attachment` back to the records they came from + # stream_record = dict() + if res_ids: + Model = self.env[self_sudo.model] + record_ids = Model.browse(res_ids) + docx_record_ids = Model + if self_sudo.attachment: + for record_id in record_ids: + attachment = self_sudo.retrieve_attachment(record_id) + if attachment and self_sudo.attachment_use: + # stream = self_sudo._retrieve_stream_from_attachment(attachment) + stream = BytesIO(attachment.raw) + save_in_attachment[record_id.id] = stream + # stream_record[stream] = record_id + if not self_sudo.attachment_use or not attachment: + docx_record_ids += record_id + else: + docx_record_ids = record_ids + res_ids = docx_record_ids.ids + + if save_in_attachment: # and not res_ids: + _logger.info("The PDF report has been generated from attachment.") + # self._raise_on_unreadable_pdfs(save_in_attachment.values(), stream_record) + return self_sudo._post_pdf(save_in_attachment), "pdf" + + docx_content = self._render_docx(res_ids, data=data) + + pdf_content = ( + self._get_pdf_from_office(docx_content) + if gotenberg_imported and check_gotenberg_installed() + else None + ) + + if not pdf_content: + raise UserError( + _( + "Gotenberg converting service not available. The PDF can not be created." + ) + ) + + if res_ids: + # self._raise_on_unreadable_pdfs(save_in_attachment.values(), stream_record) + # saving pdf in attachment. + return ( + self_sudo._post_pdf( + save_in_attachment, pdf_content=pdf_content, res_ids=res_ids + ), + "pdf", + ) + + return pdf_content, "pdf" + + @api.model + def _render_docx_docx(self, res_ids=None, data=None): + """ + Prepares the data for report file rendering, calls for the render method + and handle rendering result. + """ + if not data: + data = {} + data.setdefault("report_type", "docx") + + # access the report details with sudo() but evaluation context as current user + self_sudo = self.sudo() + + save_in_attachment = OrderedDict() + # Maps the streams in `save_in_attachment` back to the records they came from + stream_record = dict() + if res_ids: + Model = self.env[self_sudo.model] + record_ids = Model.browse(res_ids) + docx_record_ids = Model + if self_sudo.attachment: + for record_id in record_ids: + attachment = self_sudo.retrieve_attachment(record_id) + if attachment: + # stream = self_sudo._retrieve_stream_from_attachment(attachment) + stream = BytesIO(attachment.raw) + save_in_attachment[record_id.id] = stream + stream_record[stream] = record_id + if not self_sudo.attachment_use or not attachment: + docx_record_ids += record_id + else: + docx_record_ids = record_ids + res_ids = docx_record_ids.ids + + if save_in_attachment and not res_ids: + _logger.info("The DOCS report has been generated from attachment.") + return self_sudo._post_docx(save_in_attachment), "docx" + + docx_contents = [] + for record_id in res_ids: + docx_content = self._render_docx([record_id], data=data) + docx_contents.append(docx_content) + + if res_ids: + _logger.info( + "The DOCS report has been generated for model: %s, records %s." + % (self_sudo.model, str(res_ids)) + ) + return ( + self_sudo._post_docx( + save_in_attachment, docx_contents=docx_contents, res_ids=res_ids + ), + "docx", + ) + return docx_contents, "docx" + + def _post_pdf(self, save_in_attachment, pdf_content=None, res_ids=None): + """ + Adds pdf file in record's attachments. + TODO: For now bunch generation is not supported. + 2 execution ways: + - save_in_attachment and not res_ids - when get reports from attachments + - res_ids and not save_in_attachment - when generate report. + """ + self_sudo = self.sudo() + attachment_vals_list = [] + if save_in_attachment: + # here get streams from save_in_attachment, make pdf file and return it + # bunch generation here is already realized. + reports_data = list(save_in_attachment.values()) + if len(reports_data) == 1: + # If only one report, no need to merge files. Returns as is. + return reports_data[0].getvalue() + else: + return self._merge_pdfs(reports_data) + for res_id in res_ids: + record = self.env[self_sudo.model].browse(res_id) + if not self_sudo.attachment: + attachment_name = False + else: + attachment_name = safe_eval( + self_sudo.attachment, {"object": record, "time": time} + ) + # Unable to compute a name for the attachment. + if not attachment_name: + continue + attachment_vals_list.append( + { + "name": attachment_name, + "raw": pdf_content, # stream_data['stream'].getvalue(), + "res_model": self_sudo.model, + "res_id": record.id, + "type": "binary", + } + ) + if attachment_vals_list: + attachment_names = ", ".join(x["name"] for x in attachment_vals_list) + try: + self.env["ir.attachment"].create(attachment_vals_list) + except AccessError: + _logger.info( + "Cannot save PDF report %r attachments for user %r", + attachment_names, + self.env.user.display_name, + ) + else: + _logger.info( + "The PDF documents %r are now saved in the database", + attachment_names, + ) + return pdf_content + + def _post_docx(self, save_in_attachment, docx_contents=None, res_ids=None): + """ + Adds generated file in attachments. + """ + + def close_streams(streams): + for stream in streams: + try: + stream.close() + except Exception: + pass + + if len(save_in_attachment) == 1 and not docx_contents: + return list(save_in_attachment.values())[0].getvalue() + + streams = [] + if docx_contents: + # Build a record_map mapping id -> record + record_map = { + r.id: r + for r in self.env[self.model].browse( + [res_id for res_id in res_ids if res_id] + ) + } + # If no value in attachment or no record specified, only append the whole docx. + if not record_map or not self.attachment: + streams.extend(docx_contents) + else: + for res_id, docx_content in zip(res_ids, docx_contents): + if res_id in record_map and not res_id in save_in_attachment: + new_stream = self._postprocess_docx_report( + record_map[res_id], docx_content + ) + # If the buffer has been modified, mark the old buffer to be closed as well. + if new_stream and new_stream != docx_content: + close_streams([docx_content]) + docx_content = new_stream + streams.append(docx_content) + if self.attachment_use: + for stream in save_in_attachment.values(): + streams.append(stream) + if len(streams) == 1: + result = streams[0].getvalue() + else: + try: + merged_stream = self._merge_docx(streams) + result = merged_stream.getvalue() + except Exception as e: + _logger.exception(e) + raise UserError( + _("One of the documents you try to merge caused failure.") + ) + + close_streams(streams) + return result + + def _postprocess_docx_report(self, record, buffer): + """ + Creates the record in the "ir.attachment" model. + """ + attachment_name = safe_eval(self.attachment, {"object": record, "time": time}) + if not attachment_name: + return None + attachment_vals = { + "name": attachment_name, + "raw": buffer.getvalue(), + "res_model": self.model, + "res_id": record.id, + "type": "binary", + } + try: + self.env["ir.attachment"].create(attachment_vals) + except AccessError: + _logger.info( + "Cannot save DOCX report %r as attachment", attachment_vals["name"] + ) + else: + _logger.info( + "The DOCX document %s is now saved in the database", + attachment_vals["name"], + ) + return buffer + + @staticmethod + def _merge_docx(streams): + """ + Joins several docx files into one with page breaks between them. + """ + if not streams: + return None + + merged_document = Document() + composer = Composer(merged_document) + + for stream in streams: + document = Document(stream) + + if composer.doc.paragraphs: + composer.doc.add_page_break() + + composer.append(document) + + merged_stream = BytesIO() + merged_document.save(merged_stream) + merged_stream.seek(0) + + return merged_stream + + def _render_docx(self, docids: list, data: dict = None): + """ + Receive the data for rendering and calls for it. + + docids: list of record's ids for which report is generated. + data: dict, conains "context", "report_type". + """ + if not data: + data = {} + data.setdefault("report_type", "docx") + data = self._get_rendering_context( + self, docids, data + ) # self contains current record of ir.actions.report model. + return self._render_docx_template(self.report_docx_template, values=data) + + def _render_docx_template(self, template: bytes, values: dict = None): + """ + docx file rendering itself. + """ + if values is None: + values = {} + context = dict(self.env.context, inherit_branding=False) + # Browse the user instead of using the sudo self.env.user + user = self.env["res.users"].browse(self.env.uid) + website = None + if request and hasattr(request, "website"): + if request.website is not None: + website = request.website + context = dict( + context, + translatable=context.get("lang") + != request.env["ir.http"]._get_default_lang().code, + ) + values.update( + record=values["docs"], + time=time, + context_timestamp=lambda t: fields.Datetime.context_timestamp( + self.with_context(tz=user.tz), t + ), + user=user, + res_company=user.company_id, + website=website, + web_base_url=self.env["ir.config_parameter"] + .sudo() + .get_param("web.base.url", default=""), + ) + + record_to_render = values["docs"] + docs = { + key: record_to_render[key] + for key in record_to_render._fields.keys() + if not isinstance(record_to_render[key], str) + } + docs.update( + { + key: self._parse_markup(record_to_render[key]) + for key in record_to_render._fields.keys() + if isinstance(record_to_render[key], str) + } + ) + values["docs"] = docs + + docx_content = BytesIO() + with BytesIO(b64decode(template)) as template_file: + doc = DocxTemplate(template_file) + doc.render(values) + doc.save(docx_content) + docx_content.seek(0) + return docx_content + + @staticmethod + def _parse_markup(markup_data: str): + """ + Extracts data from field of Html type and returns them in text format, + without html tags. + """ + soup = BeautifulSoup(markup_data) + data_arr = list(soup.strings) + return "\n".join(data_arr) + + @staticmethod + def _get_pdf_from_office(content_stream): + """ + Converting docx into pdf with Gotenberg service. + """ + result = None + url = convert_pdf_from_office_url() + auth = get_auth() + try: + response = post_request( + url, + files={"file": ("converted_file.docx", content_stream.read())}, + auth=auth, + ) + if response.status_code == codes_request.ok: + result = response.content + else: + _logger.warning( + "Gotenberg response: %s - %s" + % (response.status_code, response.content) + ) + except RequestException as e: + _logger.exception(e) + finally: + return result diff --git a/docx_report_generation/static/description/banner.jpg b/docx_report_generation/static/description/banner.jpg new file mode 100644 index 00000000..7d73349e Binary files /dev/null and b/docx_report_generation/static/description/banner.jpg differ diff --git a/docx_report_generation/static/description/company_logo.jpg b/docx_report_generation/static/description/company_logo.jpg new file mode 100644 index 00000000..4e826eb4 Binary files /dev/null and b/docx_report_generation/static/description/company_logo.jpg differ diff --git a/docx_report_generation/static/description/divider.png b/docx_report_generation/static/description/divider.png new file mode 100644 index 00000000..b5269ea8 Binary files /dev/null and b/docx_report_generation/static/description/divider.png differ diff --git a/docx_report_generation/static/description/icon.png b/docx_report_generation/static/description/icon.png new file mode 100644 index 00000000..f4f4df08 Binary files /dev/null and b/docx_report_generation/static/description/icon.png differ diff --git a/docx_report_generation/static/description/index.html b/docx_report_generation/static/description/index.html new file mode 100644 index 00000000..17b37898 --- /dev/null +++ b/docx_report_generation/static/description/index.html @@ -0,0 +1,790 @@ + + + + + + + + + +
+ +
+

DOCX REPORT

+
+

+ The DOCX REPORT module is a tool for creating templates using the Jinja + template engine. The module allows you to add docx files to the report model as a source template. + Thanks to this, you can create automatically filled-out documents in docx and pdf formats. +

+
+
+ +
+
+
+
+ + Rydlab company logo + +
+ +
+ +
+
+
+
+
+

Features

+
+
+
Easy creation of auto-filled documents
+

+ There is no need to create a complex HTML template that is difficult to edit + and customize. It is enough to take a template in Docx format and insert the necessary values in + the right places. +

+
+
+
Access to all attributes of the model
+

+ During the creation of the report, the model to which this report belongs is + specified. When creating a report template, we can refer to any attribute of the specified + model. +

+
+
+
Easy template maintenance
+

+ There is no need to change the template in the Odoo code; it is enough to + upload a new template through the user interface. +

+
+
+
The amount-to-words methods are available
+

+ Thanks to these methods, we can insert numbers and sums with currencies in + words and round the numbers to the desired accuracy. +

+
+
+
+ +
+
+
+

How to use

+
+
Step 1: Install the module
+
+ +
+
+

+ Open the Apps menu in your Odoo and install the module "DOCX report". +

+
+
+ +
+
+
+
Step 2: Activate the Developer Mode
+
+ +
+
+

+ To create a new report in the user interface, we need to activate the + developer mode. +

+
+
+ +
+
+
+
Step 3: Open Reports
+
+ +
+
+

+ Now you should go back to the settings. Click "Technical", scroll down the + list, and click "Reports". +

+
+
+ +
+
+
+
Step 4: Create Docx template
+
+ +
+
+

+ 1. To get model attributes like model field values, use the word "docs" + + (dot) + model field name. +

+

+ 2. To call a model method that returns a value, use the word "record" + . + (dot) + model method name + () to call it. +

+

3. Use double curly braces "{{ }}" to call methods and attributes.

+

+ 4. Use curly braces with the percentage sign "{% %}" to create local + variables and use loops and if conditions. +

+
+
+ +
+
+
+
Step 5: Reports list view
+
+ +
+
+

+ When the Reports list view will be opened, click the "New" button to create a + new report. +

+
+
+ +
+
+
+
Step 6: Create a Report
+
+ +
+
+

1. To create a new report, you should fill out the form.

+

+ 2. "Action name" is the name that will be shown in the Print menu of the + model. +

+

3. "Report Type" should be DOCS or DOCX (PDF). The gotenberg service is used + to create pdf files. To use it, you need to install the Odoo module to communicate with the + service and enter the access details.

+

+ 4. "Model name" is the name of the model. Fields and methods will be derived + from this model. +

+

+ 5. "Report docx template" is the template file that was created at step 4. +

+

+ 6. "Printed report name" is the name of the file after generation. +

+

+ 7. To add this report to the Print menu, you should click on the button "Add + in the Print". +

+
+
+ +
+
+
+
Step 7: Create a custom field
+
+ +
+
+

+ 1. Custom fields are needed to get data that is not in the fields of the model associated with + the + report. Thanks to them, you can get data from other models, for example, through the reference + fields of the current model. +

+ 2. To create a custom field you should click "Custom Fields" menu on the form + and then click "Add a line" +

+

3. After that, write your Python code for the new variable.

+

4. In the template, custom fields are available by the name specified in the + "tech_name" field of the custom field entry. For exapmle: {{ contract_date }}.

+
+
+ +
+
+
+
Step 8: Print the Report
+
+ +
+
+

+ After printing the report the file will be saved. The information from the + model will complete the template. +

+
+
+ +
+
+
+
+
Step 9: Make a report from the Python code
+
+ +
+
+

If you want to make the report from the Python code, you should make an + ir.action.report record and an ir.attachment record that is connected to the first one. Add the + path to the Docx template from step 4.

+
+
+ +
+
+
+
Example of use for tables
+
+ +
+
+

The templates use Jinja2 syntax and support table generation.

+
+
+ +
+
+
+ +
+
+ + Rydlab company logo + +
+
+

Need any help for this module?

+

Contact us for your queries

+

Email: apps@rydlab.ru

+
+
+ +
+
+ + + \ No newline at end of file diff --git a/docx_report_generation/static/description/screenshots/10_quotation_example.png b/docx_report_generation/static/description/screenshots/10_quotation_example.png new file mode 100644 index 00000000..2c0e4317 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/10_quotation_example.png differ diff --git a/docx_report_generation/static/description/screenshots/1_intall_app.jpg b/docx_report_generation/static/description/screenshots/1_intall_app.jpg new file mode 100644 index 00000000..0c534876 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/1_intall_app.jpg differ diff --git a/docx_report_generation/static/description/screenshots/2_activate_developer_mode.jpg b/docx_report_generation/static/description/screenshots/2_activate_developer_mode.jpg new file mode 100644 index 00000000..48fc97e8 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/2_activate_developer_mode.jpg differ diff --git a/docx_report_generation/static/description/screenshots/3_open_reports.jpg b/docx_report_generation/static/description/screenshots/3_open_reports.jpg new file mode 100644 index 00000000..e0ee81d2 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/3_open_reports.jpg differ diff --git a/docx_report_generation/static/description/screenshots/4_docx_template.jpg b/docx_report_generation/static/description/screenshots/4_docx_template.jpg new file mode 100644 index 00000000..317495f0 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/4_docx_template.jpg differ diff --git a/docx_report_generation/static/description/screenshots/5_reporst_list.jpg b/docx_report_generation/static/description/screenshots/5_reporst_list.jpg new file mode 100644 index 00000000..b8320c7c Binary files /dev/null and b/docx_report_generation/static/description/screenshots/5_reporst_list.jpg differ diff --git a/docx_report_generation/static/description/screenshots/6_report_form.jpg b/docx_report_generation/static/description/screenshots/6_report_form.jpg new file mode 100644 index 00000000..bca5d51b Binary files /dev/null and b/docx_report_generation/static/description/screenshots/6_report_form.jpg differ diff --git a/docx_report_generation/static/description/screenshots/7_cutom_fields.jpg b/docx_report_generation/static/description/screenshots/7_cutom_fields.jpg new file mode 100644 index 00000000..0ff23c3b Binary files /dev/null and b/docx_report_generation/static/description/screenshots/7_cutom_fields.jpg differ diff --git a/docx_report_generation/static/description/screenshots/8_result.jpg b/docx_report_generation/static/description/screenshots/8_result.jpg new file mode 100644 index 00000000..b1cde03a Binary files /dev/null and b/docx_report_generation/static/description/screenshots/8_result.jpg differ diff --git a/docx_report_generation/static/description/screenshots/9_report_code.jpg b/docx_report_generation/static/description/screenshots/9_report_code.jpg new file mode 100644 index 00000000..ffe90527 Binary files /dev/null and b/docx_report_generation/static/description/screenshots/9_report_code.jpg differ diff --git a/docx_report_generation/static/src/css/mimetypes.css b/docx_report_generation/static/src/css/mimetypes.css new file mode 100644 index 00000000..e7b01859 --- /dev/null +++ b/docx_report_generation/static/src/css/mimetypes.css @@ -0,0 +1,4 @@ +.o_image[data-mimetype$='msword'], +.o_image[data-mimetype$='application/vnd.openxmlformats-officedocument.wordprocessingml.document'] { + background-image: url('/docx_report/static/src/img/msword.png'); +} diff --git a/docx_report_generation/static/src/img/msword.png b/docx_report_generation/static/src/img/msword.png new file mode 100644 index 00000000..5ac980ff Binary files /dev/null and b/docx_report_generation/static/src/img/msword.png differ diff --git a/docx_report_generation/static/src/js/action_manager_report.js b/docx_report_generation/static/src/js/action_manager_report.js new file mode 100644 index 00000000..4a78349b --- /dev/null +++ b/docx_report_generation/static/src/js/action_manager_report.js @@ -0,0 +1,55 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { download } from "@web/core/network/download"; + +async function docxHandler(action, options, env) { + let reportType = null; + if (action.report_type === "docx-docx") { + reportType = "docx"; + } else if (action.report_type === "docx-pdf") { + reportType = "pdf"; + } + if (reportType) { + // Make URL + let url = `/report/${reportType}/${action.report_name}`; + const actionContext = action.context || {}; + if (action.data && JSON.stringify(action.data) !== "{}") { + // build a query string with `action.data` (it's the place where reports + // using a wizard to customize the output traditionally put their options) + const options = encodeURIComponent(JSON.stringify(action.data)); + const context = encodeURIComponent(JSON.stringify(actionContext)); + url += `?options=${options}&context=${context}`; + } else { + if (actionContext.active_ids) { + url += `/${actionContext.active_ids.join(",")}`; + } + } + + env?.services?.ui?.block?.(); + try { + const template_type = (action.report_type && action.report_type.split("-")[0]) || "docx"; + const type = template_type + "-" + url.split("/")[2]; + await download({ + url: "/report/download", + data: { + data: JSON.stringify([url, type]), + context: JSON.stringify(Object.assign({}, actionContext, env?.services?.user?.context || {})), + }, + }); + } finally { + env?.services?.ui?.unblock?.(); + } + + const onClose = options?.onClose; + if (action.close_on_report_download) { + return env?.services?.action?.doAction({ type: "ir.actions.act_window_close" }, { onClose }); + } else if (onClose) { + onClose(); + } + return Promise.resolve(true); + } + return Promise.resolve(false); +} + +registry.category("ir.actions.report handlers").add("docx_handler_gen", docxHandler); diff --git a/docx_report_generation/tests/__init__.py b/docx_report_generation/tests/__init__.py new file mode 100644 index 00000000..14b95eee --- /dev/null +++ b/docx_report_generation/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_docx_gen diff --git a/docx_report_generation/tests/test_docx_gen.py b/docx_report_generation/tests/test_docx_gen.py new file mode 100644 index 00000000..bf7c1942 --- /dev/null +++ b/docx_report_generation/tests/test_docx_gen.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- +""" +Tests for docx_report_generation — DOCX report generation from templates. + +Validates: Requirements 13.2, 13.3 +""" +import base64 +import io +import zipfile + +from odoo.tests.common import TransactionCase +from odoo.tests import tagged + + +def _make_docx_with_template(body_text="Hello World"): + """ + Build a minimal valid DOCX file with the given body text and return it as base64 bytes. + """ + buf = io.BytesIO() + with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf: + zf.writestr( + "[Content_Types].xml", + '' + '' + '' + '' + '' + "", + ) + zf.writestr( + "_rels/.rels", + '' + '' + '' + "", + ) + zf.writestr( + "word/document.xml", + '' + '' + "" + + body_text + + "" + "", + ) + zf.writestr( + "word/_rels/document.xml.rels", + '' + '' + "", + ) + buf.seek(0) + return base64.b64encode(buf.read()) + + +@tagged("post_install", "-at_install") +class TestDocxGeneration(TransactionCase): + """ + Tests for docx_report_generation — generating DOCX reports from templates. + + Validates: Requirements 13.2, 13.3 + """ + + def setUp(self): + super().setUp() + # Create a minimal ir.actions.report record of type docx-docx + self.ir_model = self.env["ir.model"].search( + [("model", "=", "res.partner")], limit=1 + ) + self.partner = self.env["res.partner"].create({"name": "Test Partner"}) + + # Template with a simple static body (no Jinja2 variables) + self.valid_template_b64 = _make_docx_with_template("Hello World") + + # Template with an invalid/undefined Jinja2 variable reference + # docxtpl uses {{ variable }} syntax; an undefined variable with strict mode raises + self.invalid_template_b64 = _make_docx_with_template( + "{{ undefined_variable_xyz | raise_exception }}" + ) + + self.report = self.env["ir.actions.report"].create( + { + "name": "Test DOCX Generation Report", + "model": "res.partner", + "report_type": "docx-docx", + "report_docx_template": self.valid_template_b64, + } + ) + + # ------------------------------------------------------------------ + # Requirement 13.2 — generation returns non-empty binary content + # ------------------------------------------------------------------ + + def test_render_docx_template_returns_nonempty_binary(self): + """ + Req 13.2 — _render_docx_template with a valid DOCX template and a + res.partner record returns non-empty binary content (BytesIO with data). + """ + values = { + "docs": self.partner, + "report_type": "docx", + } + result = self.report._render_docx_template( + self.valid_template_b64, values=values + ) + content = result.getvalue() + self.assertTrue( + content, + "_render_docx_template should return non-empty binary content", + ) + self.assertGreater( + len(content), + 0, + "Generated DOCX content must have non-zero length", + ) + + # ------------------------------------------------------------------ + # Requirement 13.3 — invalid Jinja2 variables raise an exception + # ------------------------------------------------------------------ + + def test_render_docx_template_invalid_jinja2_raises(self): + """ + Req 13.3 — _render_docx_template with a DOCX template containing an + invalid/undefined Jinja2 expression raises an exception describing the + template error. + """ + # Build a template that uses an invalid Jinja2 filter which does not exist + invalid_b64 = _make_docx_with_template("{{ partner.nonexistent_method() }}") + values = { + "docs": self.partner, + "report_type": "docx", + } + with self.assertRaises(Exception) as ctx: + self.report._render_docx_template(invalid_b64, values=values) + # The exception message should contain some description of the error + error_msg = str(ctx.exception) + self.assertTrue( + error_msg, + "Exception raised for invalid Jinja2 template should have a non-empty message", + ) diff --git a/docx_report_generation/views/ir_actions_report_views.xml b/docx_report_generation/views/ir_actions_report_views.xml new file mode 100644 index 00000000..baff6e3e --- /dev/null +++ b/docx_report_generation/views/ir_actions_report_views.xml @@ -0,0 +1,17 @@ + + + + ir.actions.report.inherit.view.form + ir.actions.report + + + + report_type in ['docx-docx', 'docx-pdf'] + report_type not in ['docx-docx', 'docx-pdf'] + + + + + + + diff --git a/ir_rule_protected/README.rst b/ir_rule_protected/README.rst new file mode 100644 index 00000000..8b192a31 --- /dev/null +++ b/ir_rule_protected/README.rst @@ -0,0 +1,20 @@ +.. image:: https://itpp.dev/images/infinity-readme.png + :alt: Tested and maintained by IT Projects Labs + :target: https://itpp.dev + +Protect ir.rule records +======================= + +The module allows protect ir.rule from modifying and deleting. Once a rule is marked as protected only superuser is able to control this rule. + +Also, the module protect itself from uninstalling by non-superuser. + +Roadmap +======= + +* The module should allow specifying which admins can switch to superuser mode (set True to all existing admins and False for any new users) + +Further information +=================== + +Tested on `Odoo 17.0 `_ diff --git a/ir_rule_protected/__init__.py b/ir_rule_protected/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/ir_rule_protected/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/ir_rule_protected/__manifest__.py b/ir_rule_protected/__manifest__.py new file mode 100644 index 00000000..2af76255 --- /dev/null +++ b/ir_rule_protected/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "Protect ir.rule records", + "summary": "Non-superuser admins cannot change protected ir.rule or uninstall this module", + "version": "19.0.1.0.0", + "author": "IT-Projects LLC, Ivan Yelizariev", + "category": "Extra Tools", + "images": ["images/banner.jpg"], + "support": "apps@itpp.dev", + "website": "https://www.odoo.com/apps/modules/14.0/ir_rule_protected/", + "license": "Other OSI approved licence", # MIT + "depends": [], + "data": ["views.xml"], + "installable": True, +} diff --git a/ir_rule_protected/doc/changelog.rst b/ir_rule_protected/doc/changelog.rst new file mode 100644 index 00000000..5583eb32 --- /dev/null +++ b/ir_rule_protected/doc/changelog.rst @@ -0,0 +1,4 @@ +`1.0.0` +------- + +- **Init version** diff --git a/ir_rule_protected/doc/index.rst b/ir_rule_protected/doc/index.rst new file mode 100644 index 00000000..14658a19 --- /dev/null +++ b/ir_rule_protected/doc/index.rst @@ -0,0 +1,19 @@ +========================= + Protect ir.rule records +========================= + +Installation +============ + +* `Install `__ this module in a usual way + +Usage +===== + +* `Log in as SUPERUSER `__ +* `Activate Developer Mode `__ +* Open menu ``[[ Settings ]]>> Technical >> Security >> Record Rules`` +* Select or create some record +* Click ``[Edit]`` +* Set "Protected" checkbox and click ``[Save]`` button. +* RESULT: the record is protected from modifying and deleting by non-superuser. diff --git a/ir_rule_protected/i18n/de.po b/ir_rule_protected/i18n/de.po new file mode 100644 index 00000000..43fdebf7 --- /dev/null +++ b/ir_rule_protected/i18n/de.po @@ -0,0 +1,53 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ir_rule_protected +# +# Translators: +# Dawid Runowski , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-26 19:17+0000\n" +"PO-Revision-Date: 2017-12-05 05:26+0000\n" +"Last-Translator: Dawid Runowski , 2019\n" +"Language-Team: German (https://www.transifex.com/it-projects-llc/teams/76080/" +"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: ir_rule_protected +#: model:ir.model.fields,help:ir_rule_protected.field_ir_rule_protected +msgid "Make rule editable only for superuser" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_module_module +msgid "Module" +msgstr "" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:39 +#, python-format +msgid "Only admin can uninstall the module" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model.fields,field_description:ir_rule_protected.field_ir_rule_protected +msgid "Protected" +msgstr "Geschützt" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:19 +#, python-format +msgid "The Rule is protected. You don't have access for this operation" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_rule +msgid "ir.rule" +msgstr "" diff --git a/ir_rule_protected/i18n/es_CR.po b/ir_rule_protected/i18n/es_CR.po new file mode 100644 index 00000000..ca571db3 --- /dev/null +++ b/ir_rule_protected/i18n/es_CR.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ir_rule_protected +# +# Translators: +# Randall , 2018 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-21 00:17+0000\n" +"PO-Revision-Date: 2017-11-28 13:02+0000\n" +"Last-Translator: Randall , 2018\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-" +"llc/teams/76080/es_CR/)\n" +"Language: es_CR\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: ir_rule_protected +#: model:ir.model.fields,help:ir_rule_protected.field_ir_rule__protected +msgid "Make rule editable only for superuser" +msgstr "Hacer que la regla sea editable sólo para Superusuario" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_module_module +msgid "Module" +msgstr "Módulo" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:38 +#, python-format +msgid "Only admin can uninstall the module" +msgstr "Sólo admin puede desinstalar el módulo" + +#. module: ir_rule_protected +#: model:ir.model.fields,field_description:ir_rule_protected.field_ir_rule__protected +msgid "Protected" +msgstr "Protegido" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_rule +msgid "Record Rule" +msgstr "" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:18 +#, python-format +msgid "The Rule is protected. You don't have access for this operation" +msgstr "La regla está protegida. No tiene acceso para esta operación" + +#~ msgid "ir.rule" +#~ msgstr "ir.rule" diff --git a/ir_rule_protected/i18n/ir_rule_protected.pot b/ir_rule_protected/i18n/ir_rule_protected.pot new file mode 100644 index 00000000..2e6afdbd --- /dev/null +++ b/ir_rule_protected/i18n/ir_rule_protected.pot @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ir_rule_protected +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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: ir_rule_protected +#: model:ir.model.fields,help:ir_rule_protected.field_ir_rule__protected +msgid "Make rule editable only for superuser" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_module_module +msgid "Module" +msgstr "" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:0 +#, python-format +msgid "Only admin can uninstall the module" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model.fields,field_description:ir_rule_protected.field_ir_rule__protected +msgid "Protected" +msgstr "" + +#. module: ir_rule_protected +#: model:ir.model,name:ir_rule_protected.model_ir_rule +msgid "Record Rule" +msgstr "" + +#. module: ir_rule_protected +#: code:addons/ir_rule_protected/models.py:0 +#, python-format +msgid "The Rule is protected. You don't have access for this operation" +msgstr "" diff --git a/ir_rule_protected/images/banner.jpg b/ir_rule_protected/images/banner.jpg new file mode 100644 index 00000000..717fbb84 Binary files /dev/null and b/ir_rule_protected/images/banner.jpg differ diff --git a/ir_rule_protected/models.py b/ir_rule_protected/models.py new file mode 100644 index 00000000..14b832c7 --- /dev/null +++ b/ir_rule_protected/models.py @@ -0,0 +1,39 @@ +from odoo import SUPERUSER_ID, exceptions, fields, models +from odoo.tools.translate import _ + +MODULE_NAME = "ir_rule_protected" + + +class IRRule(models.Model): + _inherit = "ir.rule" + + protected = fields.Boolean( + "Protected", help="Make rule editable only for superuser" + ) + + def check_restricted(self): + if self.env.user.id == SUPERUSER_ID: + return + for r in self: + if r.protected: + raise exceptions.UserError( + _("The Rule is protected. You don't have access for this operation") + ) + + def write(self, vals): + self.check_restricted() + return super(IRRule, self).write(vals) + + def unlink(self): + self.check_restricted() + return super(IRRule, self).unlink() + + +class Module(models.Model): + _inherit = "ir.module.module" + + def button_uninstall(self): + for r in self: + if r.name == MODULE_NAME and self.env.uid != SUPERUSER_ID: + raise exceptions.UserError(_("Only admin can uninstall the module")) + return super(Module, self).button_uninstall() diff --git a/ir_rule_protected/static/description/icon.png b/ir_rule_protected/static/description/icon.png new file mode 100644 index 00000000..85f5fe74 Binary files /dev/null and b/ir_rule_protected/static/description/icon.png differ diff --git a/ir_rule_protected/tests/__init__.py b/ir_rule_protected/tests/__init__.py new file mode 100644 index 00000000..172011b5 --- /dev/null +++ b/ir_rule_protected/tests/__init__.py @@ -0,0 +1 @@ +from . import test_ir_rule diff --git a/ir_rule_protected/tests/test_ir_rule.py b/ir_rule_protected/tests/test_ir_rule.py new file mode 100644 index 00000000..c51ac11b --- /dev/null +++ b/ir_rule_protected/tests/test_ir_rule.py @@ -0,0 +1,81 @@ +# Copyright 2024 DOB +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import SUPERUSER_ID +from odoo.exceptions import UserError +from odoo.tests import new_test_user +from odoo.tests.common import TransactionCase + + +class TestIrRuleProtected(TransactionCase): + """Tests for ir_rule_protected: non-superuser cannot modify protected ir.rule. + + Validates: Requirement 6.2 + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env( + context=dict(cls.env.context, tracking_disable=True, no_reset_password=True) + ) + # Create a regular admin user (not superuser) + cls.regular_user = new_test_user( + cls.env, + name="Regular Admin", + login="test_regular_admin_ir_rule", + groups="base.group_user,base.group_system", + ) + # Create a protected ir.rule + cls.protected_rule = cls.env["ir.rule"].with_user(SUPERUSER_ID).create({ + "name": "Test Protected Rule", + "model_id": cls.env.ref("base.model_res_partner").id, + "protected": True, + }) + + def test_non_superuser_cannot_write_protected_rule(self): + """WHEN a user without is_superuser tries to modify a protected ir.rule, + ir_rule_protected SHALL deny the modification with UserError. + + Validates: Requirement 6.2 + """ + with self.assertRaises(UserError): + self.protected_rule.with_user(self.regular_user).write( + {"name": "Attempted Rename"} + ) + + def test_non_superuser_cannot_unlink_protected_rule(self): + """WHEN a user without is_superuser tries to delete a protected ir.rule, + ir_rule_protected SHALL deny the deletion with UserError. + + Validates: Requirement 6.2 + """ + with self.assertRaises(UserError): + self.protected_rule.with_user(self.regular_user).unlink() + + def test_superuser_can_write_protected_rule(self): + """WHEN the superuser modifies a protected ir.rule, + ir_rule_protected SHALL allow the modification. + + Validates: Requirement 6.2 (positive case) + """ + original_name = self.protected_rule.name + self.protected_rule.with_user(SUPERUSER_ID).write({"name": "Superuser Rename"}) + self.assertEqual(self.protected_rule.name, "Superuser Rename") + # Restore original name + self.protected_rule.with_user(SUPERUSER_ID).write({"name": original_name}) + + def test_non_superuser_can_write_unprotected_rule(self): + """WHEN a user without is_superuser modifies an unprotected ir.rule, + ir_rule_protected SHALL allow the modification. + + Validates: Requirement 6.2 (negative case — unprotected rule) + """ + unprotected_rule = self.env["ir.rule"].with_user(SUPERUSER_ID).create({ + "name": "Unprotected Rule", + "model_id": self.env.ref("base.model_res_partner").id, + "protected": False, + }) + # Should not raise + unprotected_rule.with_user(self.regular_user).write({"name": "Renamed OK"}) + self.assertEqual(unprotected_rule.name, "Renamed OK") diff --git a/ir_rule_protected/views.xml b/ir_rule_protected/views.xml new file mode 100644 index 00000000..a82ce50f --- /dev/null +++ b/ir_rule_protected/views.xml @@ -0,0 +1,11 @@ + + + ir.rule + + + + + + + + diff --git a/l10n_ru_act_rev/README.md b/l10n_ru_act_rev/README.md new file mode 100644 index 00000000..101fe21f --- /dev/null +++ b/l10n_ru_act_rev/README.md @@ -0,0 +1,14 @@ +# Российская локализация - Акт сверки +name: l10n_ru_act_rev + + +## Описание +Добавление печатной формы акт сверки из контактов, с помощью которой можно легко отслеживать дебеторские и кредиторские проводки с клиентами. + +### Для печати: +1. Выбираем меню Контакты - карточку конкретного партнера - Действия - "Печать акт сверки"; +2. В визарде выбираем: + 2.1. Компанию (для которой нужна сверка с выбранным контактом); + 2.2. Период сверки; + 2.3. Цель (один из режимом: все проведенные проводки или все проводки, включая черновики); +3. Кнопка "Печать" \ No newline at end of file diff --git a/l10n_ru_act_rev/__init__.py b/l10n_ru_act_rev/__init__.py new file mode 100644 index 00000000..778f6478 --- /dev/null +++ b/l10n_ru_act_rev/__init__.py @@ -0,0 +1,4 @@ +from . import models +from . import report +from . import wizard +from . import controllers diff --git a/l10n_ru_act_rev/__manifest__.py b/l10n_ru_act_rev/__manifest__.py new file mode 100644 index 00000000..840b9e8a --- /dev/null +++ b/l10n_ru_act_rev/__manifest__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Российская локализация - Акт сверки", + + 'summary': """ + Добавление отчета акт сверки""", + + 'description': """ + Добавление формы акт сверки, находящегося в контактах, с помощью которого можно легко отслеживать дебеторские и кредиторские проводки с клиентами. + + Для печати: + 1. Выбираем меню Контакты - конкретного партнера - Действия - "Печать акт сверки"; + 2. В визарде выбираем: + 2.1. Компанию (для которой нужна сверка с выбранным контактом); + 2.2. Период сверки; + 2.3. Цель (один из режимом: все проведенные проводки или все проводки, включая черновики); + 3. Кнопка "Печать" + + """, + + 'author': "MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'category': 'Uncategorized', + 'version': '0.1', + + # any module necessary for this one to work correctly + "depends": ["account", "portal", "website", 'contacts', "l10n_ru_doc", 'l10n_ru_contract', 'l10n_ru_base'], + "data": [ + "security/ir.model.access.csv", + "wizard/general_ledger_wizard_view.xml", + "report/layouts.xml", + "report/general_ledger.xml", + "views/account_account_views.xml", + "views/report_general_ledger.xml", + "views/portal_templates.xml", + ], + "installable": True, + "application": True, + "auto_install": False, + # only loaded in demonstration mode + 'demo': [ + 'demo/demo.xml', + ], +} diff --git a/l10n_ru_act_rev/controllers/__init__.py b/l10n_ru_act_rev/controllers/__init__.py new file mode 100644 index 00000000..457bae27 --- /dev/null +++ b/l10n_ru_act_rev/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import controllers \ No newline at end of file diff --git a/l10n_ru_act_rev/controllers/controllers.py b/l10n_ru_act_rev/controllers/controllers.py new file mode 100644 index 00000000..86e717eb --- /dev/null +++ b/l10n_ru_act_rev/controllers/controllers.py @@ -0,0 +1,89 @@ +from odoo import http +from odoo.http import request +from datetime import datetime, date + + +class ActRevise(http.Controller): + + @http.route(['/my/act_revise/'], type='http', auth="public", website=True) + def print_report(self): + partner = request.env.user.partner_id.parent_id.id + partner_name = request.env.user.partner_id.parent_id.name + if not partner: + partner = request.env.user.partner_id.id + partner_name = request.env.user.partner_id.name + company = request.env.user.company_id.id + company_name = request.env.user.company_id.name + today = date.today() + d1 = today.strftime("%d.%m.%y") + + wizard_data = { + "target_move": "posted", + "hide_account_at_0": True, + "foreign_currency": True, + "company_id": company, + "partner_ids": [partner], + "show_cost_center": True, + "centralize": True + } + wizard_record = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data) + + action = request.env.ref('l10n_ru_act_rev.action_general_ledger_wizard').read()[0] + action['res_id'] = wizard_record.id + action['context'] = dict(request.env.context) + return request.redirect('/web#action=' + str(action['id']) + '&id=' + str(wizard_record.id) + '&view_type=form') + + # @http.route(['/my/act_revise/'], type='http', auth="public", website=True) + # def print_report(self): + # partner = request.env.user.partner_id.parent_id.id + # partner_name = request.env.user.partner_id.parent_id.name + # if not partner: + # partner = request.env.user.partner_id.id + # partner_name = request.env.user.partner_id.name + # company = request.env.user.company_id.id + # company_name = request.env.user.company_id.name + # today = date.today() + # d1 = today.strftime("%d.%m.%y") + # # new_url = str('Акт Сверки ' + d1 + ' ' + company_name + '_' + partner_name) + # # new_url=str('AC ' + company +' - ' + partner + ' ' + d1) + # # if request.httprequest.full_path == '/my/act_revise/a?': + # # return werkzeug.utils.redirect('/my/act_revise/%s' % new_url) + # wizard_data = {"target_move": "posted", + # "hide_account_at_0": True, + # "foreign_currency": True, + # #"show_analytic_tags": True, + # "company_id": company, + # "partner_ids": [partner], + # #"show_partner_details": True, + # "show_cost_center": True, + # "centralize": True} + # t = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data) + # data = t._prepare_report_general_ledger() + # name = t.get_report_filename() + # report_name = name.encode('cp1251') + # pdf, _ = request.env['ir.actions.report']._render_qweb_pdf( + # 'act_revise.action_print_report_general_ledger_qweb', res_ids=t.id, data=data) + # pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)), ] + # return request.make_response(pdf, headers=pdfhttpheaders) + + @http.route(['/my/act_revise_contact/'], type='http', auth="public", website=True) + def print_report_contact(self, date_to, date_from, target_move, company, partner): + partner_id = int(partner) or 'default_partner_value' + company_id = int(company) + wizard_data = {"date_to": date_to, + "date_from": date_from, + "target_move": target_move, + "hide_account_at_0": True, + "foreign_currency": True, + #"show_analytic_tags": True, + "company_id": company_id, + "partner_ids": [partner_id], + #"show_partner_details": True, + "show_cost_center": True, + "centralize": True} + t = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data) + data = t._prepare_report_general_ledger() + pdf, _ = request.env['ir.actions.report']._render_qweb_pdf( + 'l10n_ru_act_rev.action_print_report_general_ledger_qweb', res_ids=t.id, data=data) + pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)), ] + return request.make_response(pdf, headers=pdfhttpheaders) \ No newline at end of file diff --git a/l10n_ru_act_rev/demo/demo.xml b/l10n_ru_act_rev/demo/demo.xml new file mode 100644 index 00000000..340fdd0c --- /dev/null +++ b/l10n_ru_act_rev/demo/demo.xml @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/l10n_ru_act_rev/models/__init__.py b/l10n_ru_act_rev/models/__init__.py new file mode 100644 index 00000000..f75a8039 --- /dev/null +++ b/l10n_ru_act_rev/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_account +from . import ir_actions_report \ No newline at end of file diff --git a/l10n_ru_act_rev/models/account_account.py b/l10n_ru_act_rev/models/account_account.py new file mode 100644 index 00000000..3e251fe1 --- /dev/null +++ b/l10n_ru_act_rev/models/account_account.py @@ -0,0 +1,7 @@ +from odoo import fields, models, _ + + +class AccountAccount(models.Model): + _inherit = "account.account" + + centralized = fields.Boolean(_("Централизованно")) diff --git a/l10n_ru_act_rev/models/ir_actions_report.py b/l10n_ru_act_rev/models/ir_actions_report.py new file mode 100644 index 00000000..b0f8377a --- /dev/null +++ b/l10n_ru_act_rev/models/ir_actions_report.py @@ -0,0 +1,10 @@ +from odoo import api, models + + +class IrActionsReport(models.Model): + _inherit = "ir.actions.report" + + @api.model + def _prepare_account_financial_report_context(self, data): + lang = data and data.get("account_financial_report_lang") or "" + return dict(self.env.context or {}, lang=lang) if lang else False diff --git a/l10n_ru_act_rev/report/__init__.py b/l10n_ru_act_rev/report/__init__.py new file mode 100644 index 00000000..f7ccab0f --- /dev/null +++ b/l10n_ru_act_rev/report/__init__.py @@ -0,0 +1,2 @@ +from . import general_ledger + diff --git a/l10n_ru_act_rev/report/general_ledger.py b/l10n_ru_act_rev/report/general_ledger.py new file mode 100644 index 00000000..6e54de70 --- /dev/null +++ b/l10n_ru_act_rev/report/general_ledger.py @@ -0,0 +1,1060 @@ +import calendar +import datetime +import operator + +from odoo.exceptions import UserError +from odoo import _, api, models +from odoo.tools import float_is_zero +import logging + +class GeneralLedgerReport(models.AbstractModel): + _name = "report.l10n_ru_act_rev.general_ledger" + _description = "General Ledger Report" + + COMMON_ML_FIELDS = [ + "account_id", + "partner_id", + "journal_id", + "move_type", + "date", + "ref", + "id", + "move_id", + "name", + ] + + @api.model + def _get_move_lines_domain_not_reconciled( + self, company_id, account_ids, partner_ids, only_posted_moves, date_from + ): + domain = [ + ("account_id", "in", account_ids), + ("company_id", "=", company_id), + ("reconciled", "=", False), + ] + if partner_ids: + domain += [("partner_id", "in", partner_ids)] + if only_posted_moves: + domain += [("move_id.state", "=", "posted")] + else: + domain += [("move_id.state", "in", ["posted", "draft"])] + if date_from: + domain += [("date", ">", date_from)] + return domain + + @api.model + def _get_new_move_lines_domain( + self, new_ml_ids, account_ids, company_id, partner_ids, only_posted_moves + ): + domain = [ + ("account_id", "in", account_ids), + ("company_id", "=", company_id), + ("id", "in", new_ml_ids), + ] + if partner_ids: + domain += [("partner_id", "in", partner_ids)] + if only_posted_moves: + domain += [("move_id.state", "=", "posted")] + else: + domain += [("move_id.state", "in", ["posted", "draft"])] + return domain + + def _recalculate_move_lines( + self, + move_lines, + move_type, + debit_ids, + credit_ids, + debit_amount, + credit_amount, + ml_ids, + account_ids, + company_id, + partner_ids, + only_posted_moves, + debit_amount_currency, + credit_amount_currency, + ): + debit_ids = set(debit_ids) + credit_ids = set(credit_ids) + in_credit_but_not_in_debit = credit_ids - debit_ids + reconciled_ids = list(debit_ids) + list(in_credit_but_not_in_debit) + reconciled_ids = set(reconciled_ids) + ml_ids = set(ml_ids) + new_ml_ids = reconciled_ids - ml_ids + new_ml_ids = list(new_ml_ids) + new_domain = self._get_new_move_lines_domain( + new_ml_ids, account_ids, company_id, partner_ids, only_posted_moves + ) + company_currency = self.env["res.company"].browse(company_id).currency_id + ml_fields = self._get_ml_fields() + new_move_lines = self.env["account.move.line"].search_read( + domain=new_domain, fields=ml_fields + ) + move_lines = move_lines + new_move_lines + for move_line in move_lines: + ml_id = move_line["id"] + if ml_id in debit_ids: + if move_line.get("amount_residual", False): + move_line["amount_residual"] += debit_amount[ml_id] + else: + move_line["amount_residual"] = debit_amount[ml_id] + if move_line.get("amount_residual_currency", False): + move_line["amount_residual_currency"] += debit_amount_currency[ + ml_id + ] + else: + move_line["amount_residual_currency"] = debit_amount_currency[ml_id] + if ml_id in credit_ids: + if move_line.get("amount_residual", False): + move_line["amount_residual"] -= credit_amount[ml_id] + else: + move_line["amount_residual"] = -credit_amount[ml_id] + if move_line.get("amount_residual_currency", False): + move_line["amount_residual_currency"] -= credit_amount_currency[ + ml_id + ] + else: + move_line["amount_residual_currency"] = -credit_amount_currency[ + ml_id + ] + # Set amount_currency=0 to keep the same behaviour as in v13 + # Conditions: if there is no curency_id defined or it is equal + # to the company's curency_id + if "amount_currency" in move_line and ( + "currency_id" not in move_line + or move_line["currency_id"] == company_currency.id + ): + move_line["amount_currency"] = 0 + return move_lines + + def _get_accounts_data(self, accounts_ids): + accounts = self.env["account.account"].browse(accounts_ids) + accounts_data = {} + for account in accounts: + accounts_data.update( + { + account.id: { + "id": account.id, + "code": account.code, + "name": account.name, + "hide_account": False, + "group_id": account.group_id.id, + "currency_id": account.currency_id.id, + "currency_name": account.currency_id.name, + "centralized": account.centralized, + } + } + ) + return accounts_data + + def _get_journals_data(self, journals_ids): + journals = self.env["account.journal"].browse(journals_ids) + journals_data = {} + for journal in journals: + journals_data.update({journal.id: {"id": journal.id, "code": journal.code}}) + return journals_data + + def _get_analytic_data(self, account_ids): + analytic_accounts = self.env["account.analytic.account"].browse(account_ids) + analytic_data = {} + for account in analytic_accounts: + analytic_data.update({account.id: {"name": account.name}}) + return analytic_data + + def _get_taxes_data(self, taxes_ids): + taxes = self.env["account.tax"].browse(taxes_ids) + taxes_data = {} + for tax in taxes: + taxes_data.update( + { + tax.id: { + "id": tax.id, + "amount": tax.amount, + "amount_type": tax.amount_type, + "display_name": tax.display_name, + } + } + ) + if tax.amount_type == "percent" or tax.amount_type == "division": + taxes_data[tax.id]["string"] = "%" + else: + taxes_data[tax.id]["string"] = "" + taxes_data[tax.id]["tax_name"] = ( + tax.display_name + + " (" + + str(tax.amount) + + taxes_data[tax.id]["string"] + + ")" + ) + return taxes_data + + def _get_account_type_domain(self, grouped_by): + """To avoid set all possible types, set in or not in as operator of the types + we are interested in. In v15 we used the internal_type field (type of + account.account.type).""" + at_op = "in" if grouped_by != "taxes" else "not in" + return [ + ("account_type", at_op, ["asset_receivable", "liability_payable"]), + ] + + def _get_acc_prt_accounts_ids(self, company_id, grouped_by): + accounts_domain = [ + ("company_ids", "=", company_id), + ] + self._get_account_type_domain(grouped_by) + acc_prt_accounts = self.env["account.account"].search(accounts_domain) + return acc_prt_accounts.ids + + def _get_initial_balances_bs_ml_domain( + self, account_ids, company_id, date_from, base_domain, grouped_by, acc_prt=False + ): + accounts_domain = [ + ("company_ids", "=", company_id), + ("include_initial_balance", "=", True), + ] + if account_ids: + accounts_domain += [("id", "in", account_ids)] + domain = [] + domain += base_domain + domain += [("date", "<", date_from)] + accounts = self.env["account.account"].search(accounts_domain) + domain += [("account_id", "in", accounts.ids)] + if acc_prt: + domain += self._get_account_type_domain(grouped_by) + return domain + + def _get_initial_balances_pl_ml_domain( + self, account_ids, company_id, date_from, fy_start_date, base_domain + ): + accounts_domain = [ + ("company_ids", "=", company_id), + ("include_initial_balance", "=", False), + ] + if account_ids: + accounts_domain += [("id", "in", account_ids)] + domain = [] + domain += base_domain + domain += [("date", "<", date_from), ("date", ">=", fy_start_date)] + accounts = self.env["account.account"].search(accounts_domain) + domain += [("account_id", "in", accounts.ids)] + return domain + + def _get_accounts_initial_balance(self, initial_domain_bs, initial_domain_pl): + gl_initial_acc_bs = self.env["account.move.line"].read_group( + domain=initial_domain_bs, + fields=["account_id", "debit", "credit", "balance", "amount_currency:sum"], + groupby=["account_id"], + ) + gl_initial_acc_pl = self.env["account.move.line"].read_group( + domain=initial_domain_pl, + fields=["account_id", "debit", "credit", "balance", "amount_currency:sum"], + groupby=["account_id"], + ) + gl_initial_acc = gl_initial_acc_bs + gl_initial_acc_pl + return gl_initial_acc + + def _get_initial_balance_fy_pl_ml_domain( + self, account_ids, company_id, fy_start_date, base_domain + ): + accounts_domain = [ + ("company_ids", "=", company_id), + ("include_initial_balance", "=", False), + ] + if account_ids: + accounts_domain += [("id", "in", account_ids)] + domain = [] + domain += base_domain + domain += [("date", "<", fy_start_date)] + accounts = self.env["account.account"].search(accounts_domain) + domain += [("account_id", "in", accounts.ids)] + return domain + + def _get_pl_initial_balance( + self, account_ids, company_id, fy_start_date, foreign_currency, base_domain + ): + domain = self._get_initial_balance_fy_pl_ml_domain( + account_ids, company_id, fy_start_date, base_domain + ) + initial_balances = self.env["account.move.line"].read_group( + domain=domain, + fields=["account_id", "debit", "credit", "balance", "amount_currency:sum"], + groupby=["account_id"], + ) + pl_initial_balance = { + "debit": 0.0, + "credit": 0.0, + "balance": 0.0, + "bal_curr": 0.0, + } + for initial_balance in initial_balances: + pl_initial_balance["debit"] += initial_balance["debit"] + pl_initial_balance["credit"] += initial_balance["credit"] + pl_initial_balance["balance"] += initial_balance["balance"] + pl_initial_balance["bal_curr"] += initial_balance["amount_currency"] + return pl_initial_balance + + def _get_gl_initial_acc( + self, account_ids, company_id, date_from, fy_start_date, base_domain, grouped_by + ): + initial_domain_bs = self._get_initial_balances_bs_ml_domain( + account_ids, company_id, date_from, base_domain, grouped_by + ) + initial_domain_pl = self._get_initial_balances_pl_ml_domain( + account_ids, company_id, date_from, fy_start_date, base_domain + ) + return self._get_accounts_initial_balance(initial_domain_bs, initial_domain_pl) + + def _prepare_gen_ld_data_item(self, gl): + res = {} + for key_bal in ["init_bal", "fin_bal"]: + res[key_bal] = {} + for key_field in ["credit", "debit", "balance", "bal_curr"]: + field_name = key_field if key_field != "bal_curr" else "amount_currency" + res[key_bal][key_field] = gl[field_name] + return res + + def _prepare_gen_ld_data(self, gl_initial_acc, domain, grouped_by): + data = {} + for gl in gl_initial_acc: + acc_id = gl["account_id"][0] + data[acc_id] = self._prepare_gen_ld_data_item(gl) + data[acc_id]["id"] = acc_id + if grouped_by: + data[acc_id][grouped_by] = False + method = "_prepare_gen_ld_data_group_%s" % grouped_by + if not hasattr(self, method): + return data + return getattr(self, method)(data, domain, grouped_by) + + def _prepare_gen_ld_data_group_partners(self, data, domain, grouped_by): + gl_initial_acc_prt = self.env["account.move.line"].read_group( + domain=domain, + fields=[ + "account_id", + "partner_id", + "debit", + "credit", + "balance", + "amount_currency:sum", + ], + groupby=["account_id", "partner_id"], + lazy=False, + ) + if gl_initial_acc_prt: + for gl in gl_initial_acc_prt: + if not gl["partner_id"]: + prt_id = 0 + prt_name = _("Missing Partner") + else: + prt_id = gl["partner_id"][0] + prt_name = gl["partner_id"][1] + prt_name = prt_name._value + acc_id = gl["account_id"][0] + data[acc_id][prt_id] = self._prepare_gen_ld_data_item(gl) + data[acc_id][prt_id]["id"] = prt_id + data[acc_id][prt_id]["name"] = prt_name + data[acc_id][grouped_by] = True + return data + + def _prepare_gen_ld_data_group_taxes(self, data, domain, grouped_by): + gl_initial_acc_prt = self.env["account.move.line"].read_group( + domain=domain, + fields=[ + "account_id", + "debit", + "credit", + "balance", + "amount_currency:sum", + "tax_line_id", + ], + groupby=["account_id"], + lazy=False, + ) + if gl_initial_acc_prt: + for gl in gl_initial_acc_prt: + if "tax_line_id" in gl and gl["tax_line_id"]: + tax_id = gl["tax_line_id"][0] + tax_name = gl["tax_line_id"][1] + tax_name = tax_name._value + else: + tax_id = 0 + tax_name = "Missing Tax" + acc_id = gl["account_id"][0] + data[acc_id][tax_id] = self._prepare_gen_ld_data_item(gl) + data[acc_id][tax_id]["id"] = tax_id + data[acc_id][tax_id]["name"] = tax_name + data[acc_id][grouped_by] = True + return data + + def _get_initial_balance_data( + self, + account_ids, + partner_ids, + company_id, + date_from, + foreign_currency, + only_posted_moves, + unaffected_earnings_account, + fy_start_date, + cost_center_ids, + extra_domain, + grouped_by, + ): + # If explicit list of accounts is provided, + # don't include unaffected earnings account + if account_ids: + unaffected_earnings_account = False + base_domain = [] + if company_id: + base_domain += [("company_id", "=", company_id)] + if partner_ids: + base_domain += [("partner_id", "in", partner_ids)] + if only_posted_moves: + base_domain += [("move_id.state", "=", "posted")] + else: + base_domain += [("move_id.state", "in", ["posted", "draft"])] + if cost_center_ids: + base_domain += [("analytic_account_ids", "in", cost_center_ids)] + if extra_domain: + base_domain += extra_domain + gl_initial_acc = self._get_gl_initial_acc( + account_ids, company_id, date_from, fy_start_date, base_domain, grouped_by + ) + domain = self._get_initial_balances_bs_ml_domain( + account_ids, company_id, date_from, base_domain, grouped_by, acc_prt=True + ) + data = self._prepare_gen_ld_data(gl_initial_acc, domain, grouped_by) + accounts_ids = list(data.keys()) + unaffected_id = unaffected_earnings_account + if unaffected_id: + if unaffected_id not in accounts_ids: + accounts_ids.append(unaffected_id) + data[unaffected_id] = self._initialize_data(foreign_currency) + data[unaffected_id]["id"] = unaffected_id + data[unaffected_id]["mame"] = "" + data[unaffected_id][grouped_by] = False + pl_initial_balance = self._get_pl_initial_balance( + account_ids, company_id, fy_start_date, foreign_currency, base_domain + ) + for key_bal in ["init_bal", "fin_bal"]: + fields_balance = ["credit", "debit", "balance"] + if foreign_currency: + fields_balance.append("bal_curr") + for field_name in fields_balance: + data[unaffected_id][key_bal][field_name] += pl_initial_balance[ + field_name + ] + return data + + @api.model + def _get_move_line_data(self, move_line): + move_type = move_line.get("move_type", "") + inscription = "" + account = self.env['account.account'].browse(move_line['account_id'][0]) + accounttype = account.account_type + if move_type == "entry": + if accounttype == "liability_payable": + inscription = "Платеж поставщику" + elif accounttype == "asset_receivable": + inscription = "Оплата покупателя" + # elif accounttype == "asset_current": + # inscription = "Оплата покупателя" + # else: + # inscription = "" + elif move_type == "out_invoice": + inscription = "Продажа товаров и услуг" + # elif move_type == "out_refund": + # inscription = "Сторно клиента " + elif move_type == "in_invoice": + inscription = "Покупка товаров и услуг " + # elif move_type == "in_refund": + # inscription = "Кредитное обязательство поставщика " + # elif move_type == "out_receipt": + # inscription = "Квитанция продаж" + # elif move_type == "in_receipt": + # inscription = "Квитанция покупки" + + transformed_move_name = f"{inscription} No. {move_line['move_name']}" + move_line_data = { + "id": move_line["id"], + "date": move_line["date"], + "entry": transformed_move_name, + # "entry": move_line["move_name"], + "entry_id": move_line["move_id"][0], + "journal_id": move_line["journal_id"][0], + "account_id": move_line["account_id"][0], + "partner_id": move_line["partner_id"][0] + if move_line["partner_id"] + else False, + "partner_name": move_line["partner_id"][1] + if move_line["partner_id"] + else "", + "ref": "" if not move_line["ref"] else move_line["ref"], + "name": "" if not move_line["name"] else move_line["name"], + "tax_ids": move_line["tax_ids"], + "tax_line_id": move_line["tax_line_id"], + "debit": move_line["debit"], + "credit": move_line["credit"], + "balance": move_line["balance"], + "bal_curr": move_line["amount_currency"], + "rec_id": move_line["full_reconcile_id"][0] + if move_line["full_reconcile_id"] + else False, + "rec_name": move_line["full_reconcile_id"][1] + if move_line["full_reconcile_id"] + else "", + "currency_id": move_line["currency_id"], + "analytic_distribution": move_line["analytic_distribution"] or {}, + } + if ( + move_line_data["ref"] == move_line_data["name"] + or move_line_data["ref"] == "" + ): + ref_label = move_line_data["name"] + elif move_line_data["name"] == "": + ref_label = move_line_data["ref"] + else: + ref_label = move_line_data["ref"] + str(" - ") + move_line_data["name"] + move_line_data.update({"ref_label": ref_label}) + return move_line_data + + @api.model + def _get_period_domain( + self, + account_ids, + partner_ids, + company_id, + only_posted_moves, + date_to, + date_from, + cost_center_ids, + ): + domain = [ + ("display_type", "not in", ["line_note", "line_section"]), + ("date", ">=", date_from), + ("date", "<=", date_to), + ] + if account_ids: + domain += [("account_id", "in", account_ids)] + if company_id: + domain += [("company_id", "=", company_id)] + if partner_ids: + domain += [("partner_id", "in", partner_ids)] + if only_posted_moves: + domain += [("move_id.state", "=", "posted")] + else: + domain += [("move_id.state", "in", ["posted", "draft"])] + + if cost_center_ids: + domain += [("analytic_account_ids", "in", cost_center_ids)] + return domain + + def _initialize_data(self, foreign_currency): + res = {} + for key_bal in ["init_bal", "fin_bal"]: + res[key_bal] = {} + for key_field in ["balance", "credit", "debit"]: + res[key_bal][key_field] = 0.0 + if foreign_currency: + res[key_bal]["bal_curr"] = 0.0 + return res + + def _get_reconciled_after_date_to_ids(self, full_reconcile_ids, date_to): + full_reconcile_ids = list(full_reconcile_ids) + domain = [ + ("max_date", ">", date_to), + ("full_reconcile_id", "in", full_reconcile_ids), + ] + fields = ["full_reconcile_id"] + reconciled_after_date_to = self.env["account.partial.reconcile"].search_read( + domain=domain, fields=fields + ) + rec_after_date_to_ids = list( + map(operator.itemgetter("full_reconcile_id"), reconciled_after_date_to) + ) + rec_after_date_to_ids = [i[0] for i in rec_after_date_to_ids] + return rec_after_date_to_ids + + def _prepare_ml_items(self, move_line, grouped_by): + res = [] + if grouped_by == "partners": + item_id = move_line["partner_id"][0] if move_line["partner_id"] else 0 + item_name = ( + move_line["partner_id"][1] + if move_line["partner_id"] + else _("Missing Partner") + ) + res.append({"id": item_id, "name": item_name}) + elif grouped_by == "taxes": + if move_line["tax_line_id"]: + item_id = move_line["tax_line_id"][0] + item_name = move_line["tax_line_id"][1] + res.append({"id": item_id, "name": item_name}) + elif move_line["tax_ids"]: + for tax_id in move_line["tax_ids"]: + tax_item = self.env["account.tax"].browse(tax_id) + res.append({"id": tax_item.id, "name": tax_item.name}) + else: + res.append({"id": 0, "name": "Missing Tax"}) + else: + res.append({"id": 0, "name": ""}) + return res + + def _get_period_ml_data( + self, + account_ids, + partner_ids, + company_id, + foreign_currency, + only_posted_moves, + date_from, + date_to, + gen_ld_data, + cost_center_ids, + extra_domain, + grouped_by, + ): + domain = self._get_period_domain( + account_ids, + partner_ids, + company_id, + only_posted_moves, + date_to, + date_from, + cost_center_ids, + ) + if extra_domain: + domain += extra_domain + ml_fields = self._get_ml_fields() + move_lines = self.env["account.move.line"].search_read( + domain=domain, fields=ml_fields, order="date,move_name" + ) + journal_ids = set() + full_reconcile_ids = set() + taxes_ids = set() + analytic_ids = set() + full_reconcile_data = {} + acc_prt_account_ids = self._get_acc_prt_accounts_ids(company_id, grouped_by) + for move_line in move_lines: + journal_ids.add(move_line["journal_id"][0]) + for tax_id in move_line["tax_ids"]: + taxes_ids.add(tax_id) + for analytic_account in move_line["analytic_distribution"] or {}: + analytic_ids.add(int(analytic_account)) + if move_line["full_reconcile_id"]: + rec_id = move_line["full_reconcile_id"][0] + if rec_id not in full_reconcile_ids: + full_reconcile_data.update( + { + rec_id: { + "id": rec_id, + "name": move_line["full_reconcile_id"][1], + } + } + ) + full_reconcile_ids.add(rec_id) + acc_id = move_line["account_id"][0] + ml_id = move_line["id"] + if acc_id not in gen_ld_data.keys(): + gen_ld_data[acc_id] = self._initialize_data(foreign_currency) + gen_ld_data[acc_id]["id"] = acc_id + gen_ld_data[acc_id]["mame"] = move_line["account_id"][1] + if grouped_by: + gen_ld_data[acc_id][grouped_by] = False + if acc_id in acc_prt_account_ids: + item_ids = self._prepare_ml_items(move_line, grouped_by) + for item in item_ids: + item_id = item["id"] + if item_id not in gen_ld_data[acc_id]: + if grouped_by: + gen_ld_data[acc_id][grouped_by] = True + gen_ld_data[acc_id][item_id] = self._initialize_data( + foreign_currency + ) + gen_ld_data[acc_id][item_id]["id"] = item_id + gen_ld_data[acc_id][item_id]["name"] = item["name"] + gen_ld_data[acc_id][item_id][ml_id] = self._get_move_line_data( + move_line + ) + gen_ld_data[acc_id][item_id]["fin_bal"]["credit"] += move_line[ + "credit" + ] + gen_ld_data[acc_id][item_id]["fin_bal"]["debit"] += move_line[ + "debit" + ] + gen_ld_data[acc_id][item_id]["fin_bal"]["balance"] += move_line[ + "balance" + ] + if foreign_currency: + gen_ld_data[acc_id][item_id]["fin_bal"][ + "bal_curr" + ] += move_line["amount_currency"] + else: + gen_ld_data[acc_id][ml_id] = self._get_move_line_data(move_line) + gen_ld_data[acc_id]["fin_bal"]["credit"] += move_line["credit"] + gen_ld_data[acc_id]["fin_bal"]["debit"] += move_line["debit"] + gen_ld_data[acc_id]["fin_bal"]["balance"] += move_line["balance"] + if foreign_currency: + gen_ld_data[acc_id]["fin_bal"]["bal_curr"] += move_line[ + "amount_currency" + ] + journals_data = self._get_journals_data(list(journal_ids)) + accounts_data = self._get_accounts_data(gen_ld_data.keys()) + taxes_data = self._get_taxes_data(list(taxes_ids)) + analytic_data = self._get_analytic_data(list(analytic_ids)) + rec_after_date_to_ids = self._get_reconciled_after_date_to_ids( + full_reconcile_data.keys(), date_to + ) + return ( + gen_ld_data, + accounts_data, + journals_data, + full_reconcile_data, + taxes_data, + analytic_data, + rec_after_date_to_ids, + ) + + @api.model + def _recalculate_cumul_balance( + self, move_lines, last_cumul_balance, rec_after_date_to_ids + ): + for move_line in move_lines: + move_line["balance"] += last_cumul_balance + last_cumul_balance = move_line["balance"] + if move_line["rec_id"] in rec_after_date_to_ids: + move_line["rec_name"] = "(" + _("future") + ") " + move_line["rec_name"] + return move_lines + + def _create_account(self, account, acc_id, gen_led_data, rec_after_date_to_ids): + move_lines = [] + for ml_id in gen_led_data[acc_id].keys(): + if not isinstance(ml_id, int): + account.update({ml_id: gen_led_data[acc_id][ml_id]}) + else: + move_lines += [gen_led_data[acc_id][ml_id]] + move_lines = sorted(move_lines, key=lambda k: (k["date"])) + move_lines = self._recalculate_cumul_balance( + move_lines, + gen_led_data[acc_id]["init_bal"]["balance"], + rec_after_date_to_ids, + ) + account.update({"move_lines": move_lines}) + return account + + def _create_account_not_show_item( + self, account, acc_id, gen_led_data, rec_after_date_to_ids, grouped_by + ): + move_lines = [] + for prt_id in gen_led_data[acc_id].keys(): + if not isinstance(prt_id, int): + account.update({prt_id: gen_led_data[acc_id][prt_id]}) + elif isinstance(gen_led_data[acc_id][prt_id], dict): + for ml_id in gen_led_data[acc_id][prt_id].keys(): + if isinstance(ml_id, int): + move_lines += [gen_led_data[acc_id][prt_id][ml_id]] + move_lines = sorted(move_lines, key=lambda k: (k["date"])) + move_lines = self._recalculate_cumul_balance( + move_lines, + gen_led_data[acc_id]["init_bal"]["balance"], + rec_after_date_to_ids, + ) + account.update({"move_lines": move_lines, grouped_by: False}) + return account + + def _get_list_grouped_item( + self, data, account, rec_after_date_to_ids, hide_account_at_0, rounding + ): + list_grouped = [] + for data_id in data.keys(): + group_item = {} + move_lines = [] + if not isinstance(data_id, int): + account.update({data_id: data[data_id]}) + else: + for ml_id in data[data_id].keys(): + if not isinstance(ml_id, int): + group_item.update({ml_id: data[data_id][ml_id]}) + else: + move_lines += [data[data_id][ml_id]] + move_lines = sorted(move_lines, key=lambda k: (k["date"])) + move_lines = self._recalculate_cumul_balance( + move_lines, + data[data_id]["init_bal"]["balance"], + rec_after_date_to_ids, + ) + group_item.update({"move_lines": move_lines}) + if ( + hide_account_at_0 + and float_is_zero( + data[data_id]["init_bal"]["balance"], + precision_rounding=rounding, + ) + and group_item["move_lines"] == [] + ): + continue + list_grouped += [group_item] + return account, list_grouped + + def _create_general_ledger( + self, + gen_led_data, + accounts_data, + grouped_by, + rec_after_date_to_ids, + hide_account_at_0, + ): + general_ledger = [] + rounding = self.env.company.currency_id.rounding + for acc_id in gen_led_data.keys(): + account = {} + account.update( + { + "code": accounts_data[acc_id]["code"], + "name": accounts_data[acc_id]["name"], + "type": "account", + "currency_id": accounts_data[acc_id]["currency_id"], + "centralized": accounts_data[acc_id]["centralized"], + "grouped_by": grouped_by, + } + ) + if grouped_by and not gen_led_data[acc_id][grouped_by]: + account = self._create_account( + account, acc_id, gen_led_data, rec_after_date_to_ids + ) + if ( + hide_account_at_0 + and float_is_zero( + gen_led_data[acc_id]["init_bal"]["balance"], + precision_rounding=rounding, + ) + and account["move_lines"] == [] + ): + continue + else: + if grouped_by: + account, list_grouped = self._get_list_grouped_item( + gen_led_data[acc_id], + account, + rec_after_date_to_ids, + hide_account_at_0, + rounding, + ) + account.update({"list_grouped": list_grouped}) + if ( + hide_account_at_0 + and float_is_zero( + gen_led_data[acc_id]["init_bal"]["balance"], + precision_rounding=rounding, + ) + and account["list_grouped"] == [] + ): + continue + else: + account = self._create_account_not_show_item( + account, acc_id, gen_led_data, rec_after_date_to_ids, grouped_by + ) + if ( + hide_account_at_0 + and float_is_zero( + gen_led_data[acc_id]["init_bal"]["balance"], + precision_rounding=rounding, + ) + and account["move_lines"] == [] + ): + continue + general_ledger += [account] + return general_ledger + + @api.model + def _calculate_centralization(self, centralized_ml, move_line, date_to): + jnl_id = move_line["journal_id"] + month = move_line["date"].month + if jnl_id not in centralized_ml.keys(): + centralized_ml[jnl_id] = {} + if month not in centralized_ml[jnl_id].keys(): + centralized_ml[jnl_id][month] = {} + last_day_month = calendar.monthrange(move_line["date"].year, month) + date = datetime.date(move_line["date"].year, month, last_day_month[1]) + if date > date_to: + date = date_to + centralized_ml[jnl_id][month].update( + { + "journal_id": jnl_id, + "ref_label": "Centralized entries", + "date": date, + "debit": 0.0, + "credit": 0.0, + "balance": 0.0, + "bal_curr": 0.0, + "partner_id": False, + "rec_id": 0, + "entry_id": False, + "tax_ids": [], + "tax_line_id": False, + "full_reconcile_id": False, + "id": False, + "currency_id": False, + "analytic_distribution": {}, + } + ) + centralized_ml[jnl_id][month]["debit"] += move_line["debit"] + centralized_ml[jnl_id][month]["credit"] += move_line["credit"] + centralized_ml[jnl_id][month]["balance"] += ( + move_line["debit"] - move_line["credit"] + ) + centralized_ml[jnl_id][month]["bal_curr"] += move_line["bal_curr"] + return centralized_ml + + @api.model + def _get_centralized_ml(self, account, date_to, grouped_by): + centralized_ml = {} + if isinstance(date_to, str): + date_to = datetime.datetime.strptime(date_to, "%Y-%m-%d").date() + if grouped_by and account[grouped_by]: + for item in account["list_grouped"]: + for move_line in item["move_lines"]: + centralized_ml = self._calculate_centralization( + centralized_ml, + move_line, + date_to, + ) + else: + for move_line in account["move_lines"]: + centralized_ml = self._calculate_centralization( + centralized_ml, + move_line, + date_to, + ) + list_centralized_ml = [] + for jnl_id in centralized_ml.keys(): + list_centralized_ml += list(centralized_ml[jnl_id].values()) + return list_centralized_ml + + @api.model + def _get_report_values(self, docids, data): + logging.info(f'@@@@ general_ledger ') + logging.info(f'@@@@---------------------------------------------------------------------------------------------- _get_report_values ') + logging.info(f'@@@@----------------------------------------------------------------------------------------------' ) + logging.info(f'@@@@---------------------------------------------------------------------------------------------- ') + logging.info(f'@@@@----------------------------------------------------------------------------------------------' ) + logging.info(f'@@@@---------------------------------------------------------------------------------------------- ') + logging.info(f'@@@@---------------------------------------------------------------------------------------------- ') + + wizard_id = data["wizard_id"] + company = self.env["res.company"].browse(data["company_id"]) + company_id = data["company_id"] + date_to = data["date_to"] + date_from = data["date_from"] + partner_ids = data["partner_ids"] + account_ids = data["account_ids"] + cost_center_ids = data["cost_center_ids"] + grouped_by = data["grouped_by"] + hide_account_at_0 = data["hide_account_at_0"] + foreign_currency = data["foreign_currency"] + only_posted_moves = data["only_posted_moves"] + unaffected_earnings_account = data["unaffected_earnings_account"] + fy_start_date = data["fy_start_date"] + extra_domain = data["domain"] + gen_ld_data = self._get_initial_balance_data( + account_ids, + partner_ids, + company_id, + date_from, + foreign_currency, + only_posted_moves, + unaffected_earnings_account, + fy_start_date, + cost_center_ids, + extra_domain, + grouped_by, + ) + centralize = data["centralize"] + ( + gen_ld_data, + accounts_data, + journals_data, + full_reconcile_data, + taxes_data, + analytic_data, + rec_after_date_to_ids, + ) = self._get_period_ml_data( + account_ids, + partner_ids, + company_id, + foreign_currency, + only_posted_moves, + date_from, + date_to, + gen_ld_data, + cost_center_ids, + extra_domain, + grouped_by, + ) + general_ledger = self._create_general_ledger( + gen_ld_data, + accounts_data, + grouped_by, + rec_after_date_to_ids, + hide_account_at_0, + ) + if centralize: + for account in general_ledger: + if account["centralized"]: + centralized_ml = self._get_centralized_ml( + account, date_to, grouped_by + ) + account["move_lines"] = centralized_ml + account["move_lines"] = self._recalculate_cumul_balance( + account["move_lines"], + gen_ld_data[account["id"]]["init_bal"]["balance"], + rec_after_date_to_ids, + ) + if grouped_by and account[grouped_by]: + account[grouped_by] = False + del account["list_grouped"] + general_ledger = sorted(general_ledger, key=lambda k: k["code"]) + logging.info(f'@@@@ general_ledger ') + logging.info(f'@@@@ general_ledger ') + logging.info(f'@@@@ general_ledger {general_ledger}') + logging.info(f'@@@@ general_ledger ') + logging.info(f'@@@@ general_ledger ') + if not general_ledger: + raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.') + return { + "doc_ids": [wizard_id], + "doc_model": "general.ledger.act_revise.wizard", + "docs": self.env["general.ledger.act_revise.wizard"].browse(wizard_id), + "foreign_currency": data["foreign_currency"], + "company_name": company.display_name, + "company_currency": company.currency_id, + "currency_name": company.currency_id.name, + "date_from": data["date_from"], + "date_to": data["date_to"], + "only_posted_moves": data["only_posted_moves"], + "hide_account_at_0": data["hide_account_at_0"], + "show_cost_center": data["show_cost_center"], + "general_ledger": general_ledger, + "accounts_data": accounts_data, + "journals_data": journals_data, + "full_reconcile_data": full_reconcile_data, + "taxes_data": taxes_data, + "centralize": centralize, + "analytic_data": analytic_data, + "filter_partner_ids": True if partner_ids else False, + "currency_model": self.env["res.currency"], + } + + def _get_ml_fields(self): + return self.COMMON_ML_FIELDS + [ + "analytic_distribution", + "full_reconcile_id", + "tax_line_id", + "currency_id", + "credit", + "debit", + "amount_currency", + "balance", + "tax_ids", + "move_name", + ] diff --git a/l10n_ru_act_rev/report/general_ledger.xml b/l10n_ru_act_rev/report/general_ledger.xml new file mode 100644 index 00000000..25f17b56 --- /dev/null +++ b/l10n_ru_act_rev/report/general_ledger.xml @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + Акт сверки + general.ledger.act_revise.wizard + qweb-pdf + l10n_ru_act_rev.general_ledger + l10n_ru_act_rev.general_ledger + 'Акт сверки - %s' % (object.get_report_filename() or '') + + + + + Account financial report qweb paperformat + + custom + 297 + 210 + Landscape + 12 + 8 + 5 + 5 + + 10 + 110 + + + + + \ No newline at end of file diff --git a/l10n_ru_act_rev/report/layouts.xml b/l10n_ru_act_rev/report/layouts.xml new file mode 100644 index 00000000..e77d9c7b --- /dev/null +++ b/l10n_ru_act_rev/report/layouts.xml @@ -0,0 +1,34 @@ + + + + + diff --git a/l10n_ru_act_rev/security/ir.model.access.csv b/l10n_ru_act_rev/security/ir.model.access.csv new file mode 100644 index 00000000..96c02320 --- /dev/null +++ b/l10n_ru_act_rev/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_general_ledger_act_revise_wizard,general.ledger.act_revise.wizard,model_general_ledger_act_revise_wizard,base.group_user,1,1,1,1 diff --git a/l10n_ru_act_rev/views/account_account_views.xml b/l10n_ru_act_rev/views/account_account_views.xml new file mode 100644 index 00000000..b2523dff --- /dev/null +++ b/l10n_ru_act_rev/views/account_account_views.xml @@ -0,0 +1,13 @@ + + + + account.account.form.inherit + + account.account + form + + + + + + diff --git a/l10n_ru_act_rev/views/portal_templates.xml b/l10n_ru_act_rev/views/portal_templates.xml new file mode 100644 index 00000000..b7a1ff2e --- /dev/null +++ b/l10n_ru_act_rev/views/portal_templates.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/l10n_ru_act_rev/views/report_general_ledger.xml b/l10n_ru_act_rev/views/report_general_ledger.xml new file mode 100644 index 00000000..9e6945e7 --- /dev/null +++ b/l10n_ru_act_rev/views/report_general_ledger.xml @@ -0,0 +1,9 @@ + + + + diff --git a/l10n_ru_act_rev/wizard/__init__.py b/l10n_ru_act_rev/wizard/__init__.py new file mode 100644 index 00000000..c0d813c0 --- /dev/null +++ b/l10n_ru_act_rev/wizard/__init__.py @@ -0,0 +1,2 @@ +from . import abstract_wizard +from . import general_ledger_wizard diff --git a/l10n_ru_act_rev/wizard/abstract_wizard.py b/l10n_ru_act_rev/wizard/abstract_wizard.py new file mode 100644 index 00000000..216bae78 --- /dev/null +++ b/l10n_ru_act_rev/wizard/abstract_wizard.py @@ -0,0 +1,38 @@ +from odoo import models, fields + + +class AbstractWizard(models.AbstractModel): + _name = "act_revise.abstract_wizard" + _description = "Abstract Wizard" + + def _get_partner_ids_domain(self): + return [ + "&", + "|", + ("company_id", "=", self.company_id.id), + ("company_id", "=", False), + "|", + ("parent_id", "=", False), + ("is_company", "=", True), + ] + + def _default_partners(self): + context = self.env.context + if context.get("active_ids") and context.get("active_model") == "res.partner": + partners = self.env["res.partner"].browse(context["active_ids"]) + corp_partners = partners.filtered("parent_id") + partners -= corp_partners + partners |= corp_partners.mapped("commercial_partner_id") + return partners.ids + + company_id = fields.Many2one( + comodel_name="res.company", + default=lambda self: self.env.company.id, + required=False, + string="Компания", + ) + + def button_export_pdf(self): + self.ensure_one() + report_type = "qweb-pdf" + return self._export(report_type) \ No newline at end of file diff --git a/l10n_ru_act_rev/wizard/general_ledger_wizard.py b/l10n_ru_act_rev/wizard/general_ledger_wizard.py new file mode 100644 index 00000000..dd1f7168 --- /dev/null +++ b/l10n_ru_act_rev/wizard/general_ledger_wizard.py @@ -0,0 +1,897 @@ +import logging +import time +from ast import literal_eval +from odoo import _, api, fields, models +from odoo.tools import date_utils,pycompat +from pytils import dt,numeral +from datetime import datetime, date +import re +import urllib +from odoo.exceptions import UserError + +class GeneralLedgerReportWizard(models.TransientModel): + """General ledger report wizard.""" + + _name = "general.ledger.act_revise.wizard" + _description = "General Ledger Report Wizard" + _inherit = "act_revise.abstract_wizard" + + # date_range_id = fields.Many2one(comodel_name="date.range", string="Date range") + date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from()) + date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today) + fy_start_date = fields.Date(compute="_compute_fy_start_date") + target_move = fields.Selection( + [("posted", "Все проведенные проводки"), ("all", "Все проводки")], + string="Цель операции", + required=True, + default="posted", + ) + account_ids = fields.Many2many( + comodel_name="account.account", string=_("Filter accounts") + ) + centralize = fields.Boolean(string=_("Activate centralization"), default=True) + hide_account_at_0 = fields.Boolean( + string=_("Hide account ending balance at 0"), + help=_("Use this filter to hide an account or a partner " + "with an ending balance at 0. " + "If partners are filtered, " + "debits and credits totals will not match the trial balance."), + ) + receivable_accounts_only = fields.Boolean() + payable_accounts_only = fields.Boolean() + partner_ids = fields.Many2many( + comodel_name="res.partner", + string=_("Filter partners"), + default=lambda self: self._default_partners(), + ) + account_journal_ids = fields.Many2many( + comodel_name="account.journal", string=_("Filter journals") + ) + cost_center_ids = fields.Many2many( + comodel_name="account.analytic.account", string=_("Filter cost centers") + ) + + not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True) + foreign_currency = fields.Boolean( + string=_("Show foreign currency"), + help=_("Display foreign currency for move lines, unless " + "account currency is not setup through chart of accounts " + "will display initial and final balance in that currency."), + default=lambda self: self._default_foreign_currency(), + ) + account_code_from = fields.Many2one( + comodel_name="account.account", + help="Starting account in a range", + ) + account_code_to = fields.Many2one( + comodel_name="account.account", + help="Ending account in a range", + ) + grouped_by = fields.Selection( + selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")], + default="partners", + ) + show_cost_center = fields.Boolean( + string="Show Analytic Account", + default=True, + ) + domain = fields.Char( + string="Journal Items Domain", + default=[], + help="This domain will be used to select specific domain for Journal " "Items", + ) + + # def _print_report(self, report_type): + # self.ensure_one() + # data = self._prepare_report_general_ledger() + # report = self.env["ir.actions.report"].search( + # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, ) + # if self.partner_ids[0].parent_id: + # partner = int(self.partner_ids[0].parent_id.id) + # else: + # partner = int(self.partner_ids[0].id) + # return { + # 'type': 'ir.actions.act_url', + # 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % ( + # urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move, + # self.company_id.id, partner), + # 'target': 'new', + # } + + def _get_account_move_lines_domain(self): + domain = literal_eval(self.domain) if self.domain else [] + return domain + + @api.onchange("account_code_from", "account_code_to") + def on_change_account_range(self): + if ( + self.account_code_from + and self.account_code_from.code.isdigit() + and self.account_code_to + and self.account_code_to.code.isdigit() + ): + start_range = self.account_code_from.code + end_range = self.account_code_to.code + self.account_ids = self.env["account.account"].search( + [("code", ">=", start_range), ("code", "<=", end_range)] + ) + if self.company_id: + self.account_ids = self.account_ids.filtered( + lambda a: a.company_ids == self.company_id + ) + + def _init_date_from(self): + """set start date to begin of current year if fiscal year running""" + today = fields.Date.context_today(self) + company = self.company_id or self.env.company + last_fsc_month = company.fiscalyear_last_month + last_fsc_day = company.fiscalyear_last_day + + if ( + today.month < int(last_fsc_month) + or today.month == int(last_fsc_month) + and today.day <= last_fsc_day + ): + return time.strftime("%Y-01-01") + else: + return False + + def _default_foreign_currency(self): + return self.env.user.has_group("base.group_multi_currency") + + @api.depends("date_from") + def _compute_fy_start_date(self): + for wiz in self: + if wiz.date_from: + date_from, date_to = date_utils.get_fiscal_year( + wiz.date_from, + day=self.company_id.fiscalyear_last_day, + month=int(self.company_id.fiscalyear_last_month), + ) + wiz.fy_start_date = date_from + else: + wiz.fy_start_date = False + + @api.onchange("company_id") + def onchange_company_id(self): + """Handle company change.""" + count = self.env["account.account"].search_count( + [ + ("account_type", "=", "equity_unaffected"), + ("company_ids", "=", self.company_id.id), + ] + ) + self.not_only_one_unaffected_earnings_account = count != 1 + # if ( + # self.company_id + # and self.date_range_id.company_id + # and self.date_range_id.company_id != self.company_id + # ): + # self.date_range_id = False + if self.company_id and self.account_journal_ids: + self.account_journal_ids = self.account_journal_ids.filtered( + lambda p: p.company_id == self.company_id or not p.company_id + ) + if self.company_id and self.partner_ids: + self.partner_ids = self.partner_ids.filtered( + lambda p: p.company_id == self.company_id or not p.company_id + ) + if self.company_id and self.account_ids: + if self.receivable_accounts_only or self.payable_accounts_only: + self.onchange_type_accounts_only() + else: + self.account_ids = self.account_ids.filtered( + lambda a: a.company_ids == self.company_id + ) + if self.company_id and self.cost_center_ids: + self.cost_center_ids = self.cost_center_ids.filtered( + lambda c: c.company_id == self.company_id + ) + res = { + "domain": { + "account_ids": [], + "partner_ids": [], + "account_journal_ids": [], + "cost_center_ids": [], + # "date_range_id": [], + } + } + if not self.company_id: + return res + else: + res["domain"]["account_ids"] += [("company_ids", "=", self.company_id.id)] + res["domain"]["account_journal_ids"] += [ + ("company_ids", "=", self.company_id.id) + ] + res["domain"]["partner_ids"] += self._get_partner_ids_domain() + res["domain"]["cost_center_ids"] += [ + ("company_id", "=", self.company_id.id) + ] + # res["domain"]["date_range_id"] += [ + # "|", + # ("company_id", "=", self.company_id.id), + # ("company_id", "=", False), + # ] + return res + + # @api.onchange("date_range_id") + # def onchange_date_range_id(self): + # """Handle date range change.""" + # if self.date_range_id: + # self.date_from = self.date_range_id.date_start + # self.date_to = self.date_range_id.date_end + + # @api.constrains("company_id", "date_range_id") + # def _check_company_id_date_range_id(self): + # for rec in self.sudo(): + # if ( + # rec.company_id + # and rec.date_range_id.company_id + # and rec.company_id != rec.date_range_id.company_id + # ): + # raise ValidationError( + # _( + # "The Company in the General Ledger Report Wizard and in " + # "Date Range must be the same." + # ) + # ) + + @api.onchange("receivable_accounts_only", "payable_accounts_only") + def onchange_type_accounts_only(self): + """Handle receivable/payable accounts only change.""" + if self.receivable_accounts_only or self.payable_accounts_only: + domain = [("company_ids", "=", self.company_id.id)] + if self.receivable_accounts_only and self.payable_accounts_only: + domain += [ + ("account_type", "in", ("asset_receivable", "liability_payable")) + ] + elif self.receivable_accounts_only: + domain += [("account_type", "=", "asset_receivable")] + elif self.payable_accounts_only: + domain += [("account_type", "=", "liability_payable")] + self.account_ids = self.env["account.account"].search(domain) + else: + self.account_ids = None + + @api.onchange("partner_ids") + def onchange_partner_ids(self): + """Handle partners change.""" + if self.partner_ids: + self.receivable_accounts_only = self.payable_accounts_only = True + else: + self.receivable_accounts_only = self.payable_accounts_only = False + + @api.depends("company_id") + def _compute_unaffected_earnings_account(self): + for record in self: + record.unaffected_earnings_account = self.env["account.account"].search( + [ + ("account_type", "=", "equity_unaffected"), + ("company_ids", "=", record.company_id.id), + ] + ) + + unaffected_earnings_account = fields.Many2one( + comodel_name="account.account", + compute="_compute_unaffected_earnings_account", + store=True, + ) + + # def _print_report(self, report_type): + # self.ensure_one() + # data = self._prepare_report_general_ledger() + # report_name = "act_revise.general_ledger" + # return ( + # self.env["ir.actions.report"] + # .search( + # [("report_name", "=", report_name), ("report_type", "=", report_type)], + # limit=1, + # ) + # .report_action(self, data=data) + # ) + def _print_report(self, report_type): + self.ensure_one() + data = self._prepare_report_general_ledger() + report = self.env["ir.actions.report"].search( + [("report_name", "=", "l10n_ru_act_rev.general_ledger"), ("report_type", "=", report_type)], limit=1, ) + + if self.partner_ids[0].parent_id: + partner = int(self.partner_ids[0].parent_id.id) + else: + partner = int(self.partner_ids[0].id) + account_data = self.env['account.move.line'].sudo().search([ + ('partner_id', '=', partner), + ('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')), + ('account_id.non_trade', '=', False), + ('date', '<=', self.date_to), + ('date', '>=', self.date_from) + ]) + if self.target_move == 'posted' and not account_data.filtered(lambda p: p.parent_state == 'posted') or not account_data: + raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.') + return { + 'type': 'ir.actions.act_url', + 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % ( + urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move, + self.company_id.id, partner), + 'target': 'new', + } + + def _prepare_report_general_ledger(self): + self.ensure_one() + return { + "wizard_id": self.id, + "date_from": self.date_from, + "date_to": self.date_to, + "only_posted_moves": self.target_move == "posted", + "hide_account_at_0": self.hide_account_at_0, + "foreign_currency": self.foreign_currency, + "company_id": self.company_id.id, + "account_ids": self.account_ids.ids, + "partner_ids": self.partner_ids.ids, + "grouped_by": self.grouped_by, + "cost_center_ids": self.cost_center_ids.ids, + "show_cost_center": self.show_cost_center, + "journal_ids": self.account_journal_ids.ids, + "centralize": self.centralize, + "fy_start_date": self.fy_start_date, + "unaffected_earnings_account": self.unaffected_earnings_account.id, + "account_financial_report_lang": self.env.lang, + "domain": self._get_account_move_lines_domain(), + } + + def _export(self, report_type): + """Default export is PDF.""" + return self._print_report(report_type) + + def _get_atr_from_dict(self, obj_id, data, key): + try: + return data[obj_id][key] + except KeyError: + return data[str(obj_id)][key] + + def numer(self, name): + if name: + numeration = re.findall('\d+$', name) + if numeration: return numeration[0] + return name + + def get_data_format(self, date): + if date and date != 'False': + return dt.ru_strftime(u'%d.%m.%Y г.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True) + return '' + + def initials(self, fio): + if fio: + return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip() + return '' + + def rubles(self, sum): + "Transform sum number in rubles to text" + text_rubles = numeral.rubles(int(sum)) + copeck = round((sum - int(sum)) * 100) + text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек")) + return ("%s %02d %s") % (text_rubles, copeck, text_copeck) + + def img(self, img, type='png', width=0, height=0): + if width: + width = "width='%spx'" % (width) + else: + width = " " + if height: + height = "height='%spx'" % (height) + else: + height = " " + toreturn = "" % ( + width, + height, + type, + str(pycompat.to_text(img))) + return toreturn + + def get_contract(self): + partner = int(self.partner_ids[0].id) + contract = self.env['partner.contract.customer'].search( + [('partner_id', '=', partner), ('state', '=', 'signed')], limit=1) + if contract: + return contract + + def get_function_partner(self, partner): + director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) + if director: + if director.function: + return director.function or 'отсутствует' + + def get_name_partner(self, partner): + director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) + if director: + return director.name or 'отсутствует' + + def get_report_filename(self): + today = date.today() + d1 = today.strftime("%d-%m-%Y") + if self.partner_ids[0].parent_id: + p = ''.join(self.partner_ids[0].parent_id.name) + else: + p = ''.join(self.partner_ids[0].name) + # return 'Акт Сверки '+ d1 + ' ' + self.company_id.name+'_'+p + return str(self.company_id.id) + ' - ' + ' ' + d1 + + def sorted_lines(self, list): + list = sorted(list, key=lambda k: k.get('date'), reverse=False) + return list + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# +# import time +# from ast import literal_eval +# from odoo import _, api, fields, models +# from odoo.tools import date_utils,pycompat +# from pytils import dt,numeral +# from datetime import datetime, date +# import re +# import urllib +# +# class GeneralLedgerReportWizard(models.TransientModel): +# """General ledger report wizard.""" +# +# _name = "general.ledger.act_revise.wizard" +# _description = "General Ledger Report Wizard" +# _inherit = "act_revise.abstract_wizard" +# +# # date_range_id = fields.Many2one(comodel_name="date.range", string="Date range") +# date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from()) +# date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today) +# fy_start_date = fields.Date(compute="_compute_fy_start_date") +# target_move = fields.Selection( +# [("posted", "Р’СЃРµ проведенные РїСЂРѕРІРѕРґРєРё"), ("all", "Р’СЃРµ РїСЂРѕРІРѕРґРєРё")], +# string="Цель операции", +# required=True, +# default="posted", +# ) +# account_ids = fields.Many2many( +# comodel_name="account.account", string=_("Filter accounts") +# ) +# centralize = fields.Boolean(string=_("Activate centralization"), default=True) +# hide_account_at_0 = fields.Boolean( +# string=_("Hide account ending balance at 0"), +# help=_("Use this filter to hide an account or a partner " +# "with an ending balance at 0. " +# "If partners are filtered, " +# "debits and credits totals will not match the trial balance."), +# ) +# receivable_accounts_only = fields.Boolean() +# payable_accounts_only = fields.Boolean() +# partner_ids = fields.Many2many( +# comodel_name="res.partner", +# string=_("Filter partners"), +# default=lambda self: self._default_partners(), +# ) +# account_journal_ids = fields.Many2many( +# comodel_name="account.journal", string=_("Filter journals") +# ) +# cost_center_ids = fields.Many2many( +# comodel_name="account.analytic.account", string=_("Filter cost centers") +# ) +# +# not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True) +# foreign_currency = fields.Boolean( +# string=_("Show foreign currency"), +# help=_("Display foreign currency for move lines, unless " +# "account currency is not setup through chart of accounts " +# "will display initial and final balance in that currency."), +# default=lambda self: self._default_foreign_currency(), +# ) +# account_code_from = fields.Many2one( +# comodel_name="account.account", +# help="Starting account in a range", +# ) +# account_code_to = fields.Many2one( +# comodel_name="account.account", +# help="Ending account in a range", +# ) +# grouped_by = fields.Selection( +# selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")], +# default="partners", +# ) +# show_cost_center = fields.Boolean( +# string="Show Analytic Account", +# default=True, +# ) +# domain = fields.Char( +# string="Journal Items Domain", +# default=[], +# help="This domain will be used to select specific domain for Journal " "Items", +# ) +# +# # def _print_report(self, report_type): +# # self.ensure_one() +# # data = self._prepare_report_general_ledger() +# # report = self.env["ir.actions.report"].search( +# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, ) +# # if self.partner_ids[0].parent_id: +# # partner = int(self.partner_ids[0].parent_id.id) +# # else: +# # partner = int(self.partner_ids[0].id) +# # return { +# # 'type': 'ir.actions.act_url', +# # 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % ( +# # urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move, +# # self.company_id.id, partner), +# # 'target': 'new', +# # } +# +# def _get_account_move_lines_domain(self): +# domain = literal_eval(self.domain) if self.domain else [] +# return domain +# +# @api.onchange("account_code_from", "account_code_to") +# def on_change_account_range(self): +# if ( +# self.account_code_from +# and self.account_code_from.code.isdigit() +# and self.account_code_to +# and self.account_code_to.code.isdigit() +# ): +# start_range = self.account_code_from.code +# end_range = self.account_code_to.code +# self.account_ids = self.env["account.account"].search( +# [("code", ">=", start_range), ("code", "<=", end_range)] +# ) +# if self.company_id: +# self.account_ids = self.account_ids.filtered( +# lambda a: a.company_id == self.company_id +# ) +# +# def _init_date_from(self): +# """set start date to begin of current year if fiscal year running""" +# today = fields.Date.context_today(self) +# company = self.company_id or self.env.company +# last_fsc_month = company.fiscalyear_last_month +# last_fsc_day = company.fiscalyear_last_day +# +# if ( +# today.month < int(last_fsc_month) +# or today.month == int(last_fsc_month) +# and today.day <= last_fsc_day +# ): +# return time.strftime("%Y-01-01") +# else: +# return False +# +# def _default_foreign_currency(self): +# return self.env.user.has_group("base.group_multi_currency") +# +# @api.depends("date_from") +# def _compute_fy_start_date(self): +# for wiz in self: +# if wiz.date_from: +# date_from, date_to = date_utils.get_fiscal_year( +# wiz.date_from, +# day=self.company_id.fiscalyear_last_day, +# month=int(self.company_id.fiscalyear_last_month), +# ) +# wiz.fy_start_date = date_from +# else: +# wiz.fy_start_date = False +# +# @api.onchange("company_id") +# def onchange_company_id(self): +# """Handle company change.""" +# count = self.env["account.account"].search_count( +# [ +# ("account_type", "=", "equity_unaffected"), +# ("company_id", "=", self.company_id.id), +# ] +# ) +# self.not_only_one_unaffected_earnings_account = count != 1 +# # if ( +# # self.company_id +# # and self.date_range_id.company_id +# # and self.date_range_id.company_id != self.company_id +# # ): +# # self.date_range_id = False +# if self.company_id and self.account_journal_ids: +# self.account_journal_ids = self.account_journal_ids.filtered( +# lambda p: p.company_id == self.company_id or not p.company_id +# ) +# if self.company_id and self.partner_ids: +# self.partner_ids = self.partner_ids.filtered( +# lambda p: p.company_id == self.company_id or not p.company_id +# ) +# if self.company_id and self.account_ids: +# if self.receivable_accounts_only or self.payable_accounts_only: +# self.onchange_type_accounts_only() +# else: +# self.account_ids = self.account_ids.filtered( +# lambda a: a.company_id == self.company_id +# ) +# if self.company_id and self.cost_center_ids: +# self.cost_center_ids = self.cost_center_ids.filtered( +# lambda c: c.company_id == self.company_id +# ) +# res = { +# "domain": { +# "account_ids": [], +# "partner_ids": [], +# "account_journal_ids": [], +# "cost_center_ids": [], +# # "date_range_id": [], +# } +# } +# if not self.company_id: +# return res +# else: +# res["domain"]["account_ids"] += [("company_id", "=", self.company_id.id)] +# res["domain"]["account_journal_ids"] += [ +# ("company_id", "=", self.company_id.id) +# ] +# res["domain"]["partner_ids"] += self._get_partner_ids_domain() +# res["domain"]["cost_center_ids"] += [ +# ("company_id", "=", self.company_id.id) +# ] +# # res["domain"]["date_range_id"] += [ +# # "|", +# # ("company_id", "=", self.company_id.id), +# # ("company_id", "=", False), +# # ] +# return res +# +# # @api.onchange("date_range_id") +# # def onchange_date_range_id(self): +# # """Handle date range change.""" +# # if self.date_range_id: +# # self.date_from = self.date_range_id.date_start +# # self.date_to = self.date_range_id.date_end +# +# # @api.constrains("company_id", "date_range_id") +# # def _check_company_id_date_range_id(self): +# # for rec in self.sudo(): +# # if ( +# # rec.company_id +# # and rec.date_range_id.company_id +# # and rec.company_id != rec.date_range_id.company_id +# # ): +# # raise ValidationError( +# # _( +# # "The Company in the General Ledger Report Wizard and in " +# # "Date Range must be the same." +# # ) +# # ) +# +# @api.onchange("receivable_accounts_only", "payable_accounts_only") +# def onchange_type_accounts_only(self): +# """Handle receivable/payable accounts only change.""" +# if self.receivable_accounts_only or self.payable_accounts_only: +# domain = [("company_id", "=", self.company_id.id)] +# if self.receivable_accounts_only and self.payable_accounts_only: +# domain += [ +# ("account_type", "in", ("asset_receivable", "liability_payable")) +# ] +# elif self.receivable_accounts_only: +# domain += [("account_type", "=", "asset_receivable")] +# elif self.payable_accounts_only: +# domain += [("account_type", "=", "liability_payable")] +# self.account_ids = self.env["account.account"].search(domain) +# else: +# self.account_ids = None +# +# @api.onchange("partner_ids") +# def onchange_partner_ids(self): +# """Handle partners change.""" +# if self.partner_ids: +# self.receivable_accounts_only = self.payable_accounts_only = True +# else: +# self.receivable_accounts_only = self.payable_accounts_only = False +# +# @api.depends("company_id") +# def _compute_unaffected_earnings_account(self): +# for record in self: +# record.unaffected_earnings_account = self.env["account.account"].search( +# [ +# ("account_type", "=", "equity_unaffected"), +# ("company_id", "=", record.company_id.id), +# ] +# ) +# +# unaffected_earnings_account = fields.Many2one( +# comodel_name="account.account", +# compute="_compute_unaffected_earnings_account", +# store=True, +# ) +# +# # def _print_report(self, report_type): +# # self.ensure_one() +# # data = self._prepare_report_general_ledger() +# # report_name = "act_revise.general_ledger" +# # return ( +# # self.env["ir.actions.report"] +# # .search( +# # [("report_name", "=", report_name), ("report_type", "=", report_type)], +# # limit=1, +# # ) +# # .report_action(self, data=data) +# # ) +# def _print_report(self, report_type): +# self.ensure_one() +# data = self._prepare_report_general_ledger() +# report = self.env["ir.actions.report"].search( +# [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, ) +# # report.report_name='Test' +# # report.headers.add('Content-Disposition', 'attachment; filename="Test.pdf";') +# # pdf, _ = request.env.ref('act_revise.action_print_report_general_ledger_qweb').sudo().render_qweb_pdf(self,data=data) +# # pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)),('Content-Disposition', 'attachment; filename="%s";' % report_name),] +# # return request.make_response(pdf, headers=pdfhttpheaders) +# # return ( +# # self.env["ir.actions.report"] +# # .search( +# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], +# # limit=1, +# # ) +# # report.report_action(self, data=data) +# # ) +# # name='Test' +# if self.partner_ids[0].parent_id: +# partner = int(self.partner_ids[0].parent_id.id) +# else: +# partner = int(self.partner_ids[0].id) +# account_data = self.env['account.move.line'].sudo().search([ +# ('partner_id', '=', partner.id), +# ('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')), +# ('account_id.non_trade', '=', False), +# ('date', '<=', self.date_to), +# ('date', '>=', self.date_from) +# ]) +# if not account_data: +# raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.') +# return { +# 'type': 'ir.actions.act_url', +# 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % ( +# urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move, +# self.company_id.id, partner), +# 'target': 'new', +# } +# +# def _prepare_report_general_ledger(self): +# self.ensure_one() +# return { +# "wizard_id": self.id, +# "date_from": self.date_from, +# "date_to": self.date_to, +# "only_posted_moves": self.target_move == "posted", +# "hide_account_at_0": self.hide_account_at_0, +# "foreign_currency": self.foreign_currency, +# "company_id": self.company_id.id, +# "account_ids": self.account_ids.ids, +# "partner_ids": self.partner_ids.ids, +# "grouped_by": self.grouped_by, +# "cost_center_ids": self.cost_center_ids.ids, +# "show_cost_center": self.show_cost_center, +# "journal_ids": self.account_journal_ids.ids, +# "centralize": self.centralize, +# "fy_start_date": self.fy_start_date, +# "unaffected_earnings_account": self.unaffected_earnings_account.id, +# "account_financial_report_lang": self.env.lang, +# "domain": self._get_account_move_lines_domain(), +# } +# +# def _export(self, report_type): +# """Default export is PDF.""" +# return self._print_report(report_type) +# +# def _get_atr_from_dict(self, obj_id, data, key): +# try: +# return data[obj_id][key] +# except KeyError: +# return data[str(obj_id)][key] +# +# def numer(self, name): +# if name: +# numeration = re.findall('\d+$', name) +# if numeration: return numeration[0] +# return name +# +# def get_data_format(self, date): +# if date and date != 'False': +# return dt.ru_strftime(u'%d.%m.%Y Рі.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True) +# return '' +# +# def initials(self, fio): +# if fio: +# return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip() +# return '' +# +# def rubles(self, sum): +# "Transform sum number in rubles to text" +# text_rubles = numeral.rubles(int(sum)) +# copeck = round((sum - int(sum)) * 100) +# text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек")) +# return ("%s %02d %s") % (text_rubles, copeck, text_copeck) +# +# def img(self, img, type='png', width=0, height=0): +# if width: +# width = "width='%spx'" % (width) +# else: +# width = " " +# if height: +# height = "height='%spx'" % (height) +# else: +# height = " " +# toreturn = "" % ( +# width, +# height, +# type, +# str(pycompat.to_text(img))) +# return toreturn +# +# def get_contract(self): +# partner = int(self.partner_ids[0].id) +# contract = self.env['partner.contract.customer'].search( +# [('partner_id', '=', partner), ('state', '=', 'signed')], limit=1) +# if contract: +# return contract +# +# def get_function_partner(self, partner): +# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) +# if director: +# if director.function: +# return director.function or 'отсутствует' +# +# def get_name_partner(self, partner): +# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) +# if director: +# return director.name or 'отсутствует' +# +# def get_report_filename(self): +# today = date.today() +# d1 = today.strftime("%d-%m-%Y") +# if self.partner_ids[0].parent_id: +# p = ''.join(self.partner_ids[0].parent_id.name) +# else: +# p = ''.join(self.partner_ids[0].name) +# # return 'РђРєС‚ Сверки '+ d1 + ' ' + self.company_id.name+'_'+p +# return str(self.company_id.id) + ' - ' + ' ' + d1 +# +# def sorted_lines(self, list): +# list = sorted(list, key=lambda k: k.get('date'), reverse=False) +# return list diff --git a/l10n_ru_act_rev/wizard/general_ledger_wizard_view.xml b/l10n_ru_act_rev/wizard/general_ledger_wizard_view.xml new file mode 100644 index 00000000..03c513b8 --- /dev/null +++ b/l10n_ru_act_rev/wizard/general_ledger_wizard_view.xml @@ -0,0 +1,167 @@ + + + + + Акт сверки + general.ledger.act_revise.wizard + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +

+ General Ledger can be computed only if selected company have + only one unaffected earnings account. +

+ +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + Акт сверки + general.ledger.act_revise.wizard + form + + new + + + + Печатать акт сверки + general.ledger.act_revise.wizard + + form + {'default_receivable_accounts_only': 1, 'default_payable_accounts_only': 1} + + new + + + + +
diff --git a/l10n_ru_advance_payments/README.md b/l10n_ru_advance_payments/README.md new file mode 100644 index 00000000..c595d9d8 --- /dev/null +++ b/l10n_ru_advance_payments/README.md @@ -0,0 +1,16 @@ +# Российская локализация - Авансовые платежи +name: l10n_ru_advance_payments + +## Описание +Модуль, добавляющий функционал ведения учета авансовых платежей, обеспечивает создание авансового счета на основе заказа продаж и последующее формирование к этому счету авансовых платежей. Он позволяет автоматически связывать авансовые платежи с соответствующими заказами и счетами, обеспечивая прозрачный и удобный учет предоплат в рамках бизнес-процессов. Благодаря этому модулю упрощается контроль за поступлением авансов, их распределением и учетом в финансовой отчетности, что повышает точность и эффективность управления денежными потоками. + + +### Создание авансового платежа: +1. Меню Продажи - выбираем нужный Заказ продаж - кнопка "Авансовый счет"; +2. На форме проверяем информацию (при необходимости корректируем) и подтверждаем его нажатием на кнопку "Подтвердить"; +3. При нажатии на кнопку "Регистрация платежа" откроется визард, где по умолчанию проставляется вся сумма счета. При необходимости редактируется на сумму фактического платежа. Добавленный платеж отображается на вкладке "Доп. информация". Там же отображается остаток долга по счету.; +4. При повторном создании платежа к тому же счету планируемая сумма платежа будет равна остатку долга по счету и так же может быть скорректирована. + + +### Для печати: +1. Открываем созданную запись счета - Действие - "Счет" (или "Счет по форме 1С") \ No newline at end of file diff --git a/l10n_ru_advance_payments/__init__.py b/l10n_ru_advance_payments/__init__.py new file mode 100644 index 00000000..0f777752 --- /dev/null +++ b/l10n_ru_advance_payments/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import wizard +from . import report diff --git a/l10n_ru_advance_payments/__manifest__.py b/l10n_ru_advance_payments/__manifest__.py new file mode 100644 index 00000000..f61f47e2 --- /dev/null +++ b/l10n_ru_advance_payments/__manifest__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Российская локализация - Авансовые счета', + 'version': '19.0.2025.06.06', + 'description': """Модуль создания новой модели - Авансовые счета. Он добавляет функционал построенный на базовых + функциях бухгалтерии.""", + + 'author': "MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'depends': ['account', + 'sale', + 'l10n_ru_contract', + 'l10n_ru_doc', + 'l10n_latam_check' + ], + + 'data': [ + 'security/ir.model.access.csv', + 'data/data.xml', + 'views/order_prepaid.xml', + 'views/sale_order.xml', + 'report/order_prepaid.xml', + 'report/report_order_prepaid.xml', + 'report/report_invoice.xml', + 'wizard/account_payment_register_prepaid.xml', + 'views/res_config_settings.xml', + ], + + "external_dependencies": { + "python": [ + "pytils" + ] + }, + "demo": [ + "demo/demo.xml", + ], +} diff --git a/l10n_ru_advance_payments/data/data.xml b/l10n_ru_advance_payments/data/data.xml new file mode 100644 index 00000000..55ffdb9d --- /dev/null +++ b/l10n_ru_advance_payments/data/data.xml @@ -0,0 +1,9 @@ + + + Order Prepaid Нумерация + order.prepaid + OP/ + 5 + + + \ No newline at end of file diff --git a/l10n_ru_advance_payments/demo/demo.xml b/l10n_ru_advance_payments/demo/demo.xml new file mode 100644 index 00000000..a9589a5f --- /dev/null +++ b/l10n_ru_advance_payments/demo/demo.xml @@ -0,0 +1,51 @@ + + + + + + + + АС-2026-001 + + 2026-01-15 + 2026-01-30 + + inbound + draft + + + + + + Предоплата за товар + 1.0 + 150000.0 + + + + Предоплата за доставку + 1.0 + 5000.0 + + + + + АС-2026-002 + + 2026-01-20 + 2026-02-05 + + outbound + draft + + + + + Аванс поставщику за сырьё + 10.0 + 8000.0 + + + + diff --git a/l10n_ru_advance_payments/i18n/ru.po b/l10n_ru_advance_payments/i18n/ru.po new file mode 100644 index 00000000..05500e35 --- /dev/null +++ b/l10n_ru_advance_payments/i18n/ru.po @@ -0,0 +1,917 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ru_advance_payments +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e-20241220\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-06-06 14:28+0000\n" +"PO-Revision-Date: 2025-06-06 14:28+0000\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: l10n_ru_advance_payments +#: model:ir.actions.report,print_report_name:l10n_ru_advance_payments.report_order_prepaid_invoice +msgid "" +"'Счет - %s ' % ((object.name if object.name else '')+' '+(object.partner_id.parent_id.name if\n" +" object.partner_id.parent_id else object.partner_id.name))" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.actions.report,print_report_name:l10n_ru_advance_payments.action_report_orderprepaid +msgid "" +"'Счет - %s ' % (str(object.name)+' '+(str(object.partner_id.parent_id.name) if\n" +" object.partner_id.parent_id else str(object.partner_id.name)))\n" +" " +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid ", на сумму" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "" +"\n" +" Draft\n" +" " +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Адрес банка:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Адрес бенефициара:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "БИК:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Банк:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Бенефициар:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "ИНН:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Номер счета/IBAN:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Количество" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Налог" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Описание" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Сумма" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Счет" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Цена за ед.изм." +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Подытог" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Всего" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "" +"Выдано:\n" +"
" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "" +"Дата счета:\n" +"
\n" +" Срок оплаты:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_needaction +msgid "Action Needed" +msgstr "Требуется действие" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_ids +msgid "Activities" +msgstr "Действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Оформление исключения активности" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_state +msgid "Activity State" +msgstr "Состояние активности" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_type_icon +msgid "Activity Type Icon" +msgstr "Иконка типа активности" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__analytic_distribution_search +msgid "Analytic Distribution Search" +msgstr "Поиск аналитического распределения" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__analytic_precision +msgid "Analytic Precision" +msgstr "Точность аналитики" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_attachment_count +msgid "Attachment Count" +msgstr "Количество вложений" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_sale_order_line__bool_const_bill +msgid "Bool Const Bill" +msgstr "Логическая константа счета" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_sale_order_line__bool_const_bill_bill +msgid "Bool Const Bill Bill" +msgstr "Логическая константа счета счет" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_res_company +msgid "Companies" +msgstr "Компании" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_res_config_settings +msgid "Config Settings" +msgstr "Параметры конфигурации" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__create_uid +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__create_uid +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__create_date +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__create_date +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__create_date +msgid "Created on" +msgstr "Создано" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__currency_id +msgid "Currency" +msgstr "Валюта" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__display_name +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__display_name +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Draft" +msgstr "Черновик" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_follower_ids +msgid "Followers" +msgstr "Подписчики" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_partner_ids +msgid "Followers (Partners)" +msgstr "Подписчики (Партнеры)" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Иконка Font Awesome, например fa-tasks" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__has_message +msgid "Has Message" +msgstr "Есть сообщение" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_exception_icon +msgid "Icon" +msgstr "Иконка" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Иконка для обозначения исключительной активности." + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Если отмечено, новые сообщения требуют вашего внимания." + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__message_has_error +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "Если отмечено, некоторые сообщения имеют ошибку доставки." + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__invoice_partner_display_name +msgid "Invoice Partner Display Name" +msgstr "Отображаемое имя партнера по счету" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_is_follower +msgid "Is Follower" +msgstr "Является подписчиком" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__write_uid +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__write_uid +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__write_uid +msgid "Last Updated by" +msgstr "Последнее изменение внесено" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__write_date +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__write_date +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__write_date +msgid "Last Updated on" +msgstr "Дата последнего изменения" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_has_error +msgid "Message Delivery error" +msgstr "Ошибка доставки сообщения" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_ids +msgid "Messages" +msgstr "Сообщения" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Срок выполнения моего действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_calendar_event_id +msgid "Next Activity Calendar Event" +msgstr "Следующее событие календаря действий" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Срок следующего действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_summary +msgid "Next Activity Summary" +msgstr "Краткое описание следующего действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_type_id +msgid "Next Activity Type" +msgstr "Тип следующего действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_needaction_counter +msgid "Number of Actions" +msgstr "Количество действий" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_has_error_counter +msgid "Number of errors" +msgstr "Количество ошибок" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Количество сообщений, требующих действия" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Количество сообщений с ошибкой доставки" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_order_prepaid_line +msgid "Order Prepaid line" +msgstr "Строка предоплаты заказа" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_account_payment +msgid "Payments" +msgstr "Платежи" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__rating_ids +msgid "Ratings" +msgstr "Оценки" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_account_payment_register_prepaid_form +msgid "Register Payment" +msgstr "Зарегистрировать платеж" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__activity_user_id +msgid "Responsible User" +msgstr "Ответственный пользователь" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__message_has_sms_error +msgid "SMS Delivery error" +msgstr "Ошибка доставки SMS" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_sale_order +msgid "Sales Order" +msgstr "Заказ на продажу" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_sale_order_line +msgid "Sales Order Line" +msgstr "Позиция заказа на продажу" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Статус на основе действий\n" +"Просрочено: Срок уже прошёл\n" +"Сегодня: Дата действия — сегодня\n" +"Запланировано: Будущие действия." + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__price_subtotal +msgid "Subtotal" +msgstr "Промежуточный итог" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Tax 15%" +msgstr "Налог 15%" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__price_total +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.tree_order_prepaid_view +msgid "Total" +msgstr "Итого" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Тип исключительной активности в записи." + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__website_message_ids +msgid "Website Messages" +msgstr "Сообщения сайта" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,help:l10n_ru_advance_payments.field_order_prepaid__website_message_ids +msgid "Website communication history" +msgstr "История коммуникаций сайта" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "units" +msgstr "единицы" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_order_prepaid +msgid "Авансовые платежи" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.actions.act_window,name:l10n_ru_advance_payments.action_order_prepaid +#: model:ir.ui.menu,name:l10n_ru_advance_payments.menu_order_prepaid +#: model:ir.ui.menu,name:l10n_ru_advance_payments.menu_order_prepaid_bill +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.tree_order_prepaid_view +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_sale_order_form_inherit_button_advance +msgid "Авансовые счета" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_res_config_settings_advance +msgid "Авансовые счета:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__prepaid_id +msgid "Авансовый платеж" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_account_payment__prepaid_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__prepaid_id +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_sale_order_form_inherit_button_advance +msgid "Авансовый счет" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__analytic_distribution +msgid "Аналитическое распределение" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "БИК" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Банк получателя" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__partner_bank_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__partner_bank_id +msgid "Банковский счёт получателя" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Без НДС" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Бухгалтер" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__payment_state__in_payment +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "В оплате" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__currency_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__currency_id +msgid "Валюта" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__currency_const +msgid "Валюта(Const)" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "" +"Внимание! Оплата данного счета означает согласие с условиями поставки " +"товара." +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__all_total +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__amount +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Всего" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Всего наименований" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__advance_type__inbound +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_res_config_settings_advance +msgid "Входящий" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_res_company__advance_in_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_res_config_settings__advance_in_id +msgid "Входящий счет" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__payment_amount +msgid "Выплачено" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__payment_date +msgid "Дата платежа" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__invoice_date +msgid "Дата счета" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Доп. информация" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Ед." +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__product_uom_id +msgid "Ед. измерения" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__journal_id +msgid "Журнал" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__sale_order_id +msgid "Заказ продаж" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_sale_order__prepaid_advance_count +msgid "Закупки" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__communication +msgid "Заметки" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "ИНН" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Информация" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__advance_type__outbound +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_res_config_settings_advance +msgid "Исходящий" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_res_company__advance_out_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_res_config_settings__advance_out_id +msgid "Исходящий счет" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "КПП" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Кол-во" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__quantity +msgid "Количество" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__comment +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Комментарий" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__company_id +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__company_id +msgid "Компания" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__company_partner_id +msgid "Контакт компании" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__partner_id +msgid "Контрагент" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__label +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__name +msgid "Метка" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__method_line_type +msgid "Метод" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__payment_method_line_id +msgid "Метод оплаты" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "НДС:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__name +msgid "Название" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__tax_ids +msgid "Налоги" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__payment_state__not_paid +msgid "Не оплачен" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.tree_order_prepaid_view +msgid "Номер" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.template_order_prepaid_invoice_body +msgid "Номер:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__payment_state__paid +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Оплачено" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__amount_residual +msgid "Остаток долга" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_account_payment_register_prepaid_form +msgid "Отмена" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__state__cancel +msgid "Отменено" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Переместить в черновики" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__payment_id +msgid "Платеж" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Подтвердить" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Позиция счета" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Покупатель:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Получатель" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Поставщик:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__state__posted +msgid "Проведено" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__th_field_taxes +msgid "Проверка столбца налогов" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__product_id +msgid "Продукт" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Регистрация Платежа" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model,name:l10n_ru_advance_payments.model_payment_register_prepaid +msgid "Регистрация авансовых платежей" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Руководитель" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__payment_line_ids +msgid "Связанные платежи" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_sale_order_line__prepaid_ids +msgid "Связные строки авансовых счетов" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__sale_ids +msgid "Связные строки заказа" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.view_account_payment_register_prepaid_form +msgid "Создать платеж" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__invoice_date_due +msgid "Срок оплаты" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__state +msgid "Статус" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__payment_state +msgid "Статус платежа" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__prepaid_line +msgid "Строки счета" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__amount_sum_line +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__amount +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Сумма" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_account_payment__amount_adv_currency +msgid "Сумма от счета" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__amount_const +msgid "Сумма(Const)" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Сч. №" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.actions.report,name:l10n_ru_advance_payments.report_order_prepaid_invoice +msgid "Счет" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.actions.report,name:l10n_ru_advance_payments.action_report_orderprepaid +msgid "Счет по форме 1С" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__account_id +msgid "Счёт" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__advance_type +msgid "Тип платежа" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_payment_register_prepaid__advance_type +msgid "Тип счета на аванс" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Товары (работы, услуги)" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid__payment_terms +msgid "Условия оплаты" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Условия оплаты:" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields,field_description:l10n_ru_advance_payments.field_order_prepaid_line__price_unit +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "Цена" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__payment_state__partial +msgid "Частично оплачено" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.form_order_prepaid_view +msgid "Частичный" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model:ir.model.fields.selection,name:l10n_ru_advance_payments.selection__order_prepaid__state__draft +msgid "Черновик" +msgstr "" + +#. module: l10n_ru_advance_payments +#: model_terms:ir.ui.view,arch_db:l10n_ru_advance_payments.report_order_prepaid +msgid "руб." +msgstr "" diff --git a/l10n_ru_advance_payments/models/__init__.py b/l10n_ru_advance_payments/models/__init__.py new file mode 100644 index 00000000..82aa0994 --- /dev/null +++ b/l10n_ru_advance_payments/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from . import sale_order +from . import sale_order_line +from . import order_prepaid +from . import order_prepaid_line +from . import account_payment +from . import res_company +from . import res_config_settings \ No newline at end of file diff --git a/l10n_ru_advance_payments/models/account_payment.py b/l10n_ru_advance_payments/models/account_payment.py new file mode 100644 index 00000000..c1d7a72f --- /dev/null +++ b/l10n_ru_advance_payments/models/account_payment.py @@ -0,0 +1,55 @@ +from odoo import models, fields, api + + +class AccountPayment(models.Model): + _inherit = 'account.payment' + + prepaid_id = fields.Many2one(comodel_name='order.prepaid', string='Авансовый счет') + amount_adv_currency = fields.Float(string='Сумма от счета', default=0) + + + @api.depends('journal_id', 'partner_id', 'partner_type') + def _compute_destination_account_id(self): + for pay in self: + pay.destination_account_id = False + company = pay.company_id + + if pay.prepaid_id: + if pay.payment_type == 'inbound' and company.advance_in_id: + pay.destination_account_id = company.advance_in_id.id + elif pay.payment_type == 'outbound' and company.advance_out_id: + pay.destination_account_id = company.advance_out_id.id + + if pay.destination_account_id: + continue + + partner = pay.partner_id + # if pay.default_is_internal_transfer: + # pay.destination_account_id = pay.destination_journal_id.company_id.transfer_account_id + if pay.partner_type == 'customer': + pay.destination_account_id = self._get_partner_account( + partner, + company, + account_type='asset_receivable', + partner_account_field='property_account_receivable_id' + ) + elif pay.partner_type == 'supplier': + pay.destination_account_id = self._get_partner_account( + partner, + company, + account_type='liability_payable', + partner_account_field='property_account_payable_id' + ) + + def _get_partner_account(self, partner, company, account_type, partner_account_field): + if partner: + account = getattr(partner.with_company(company), partner_account_field, False) + if account: + return account.id + account = self.env['account.account'].search([ + *self.env['account.account']._check_company_domain(company), + ('account_type', '=', account_type), + ('deprecated', '=', False), + ], limit=1) + + return account.id if account else False \ No newline at end of file diff --git a/l10n_ru_advance_payments/models/order_prepaid.py b/l10n_ru_advance_payments/models/order_prepaid.py new file mode 100644 index 00000000..5b0c9193 --- /dev/null +++ b/l10n_ru_advance_payments/models/order_prepaid.py @@ -0,0 +1,195 @@ +from odoo import models, fields, api + +class OrderPrepaid(models.Model): + _name = 'order.prepaid' + _description = 'Авансовые платежи' + _inherit = ['mail.thread', 'mail.activity.mixin'] + + name = fields.Char(string='Название', default='Draft', copy=False) + partner_id = fields.Many2one(comodel_name='res.partner', string='Контрагент') + invoice_partner_display_name = fields.Char(compute='_compute_invoice_partner_display_info', store=True) + + payment_terms = fields.Char(string='Условия оплаты') + invoice_date = fields.Date(string='Дата счета', default=fields.Date.context_today, required=True) + invoice_date_due = fields.Date(string='Срок оплаты', default=fields.Date.context_today, required=True) + company_id = fields.Many2one(comodel_name='res.company', string='Компания') + sale_order_id = fields.Many2one(comodel_name='sale.order', string='Заказ продаж') + advance_type = fields.Selection(selection=[('outbound', 'Исходящий'),('inbound', 'Входящий')], + string='Тип платежа', default='inbound') + comment = fields.Text(string='Комментарий') + state = fields.Selection(selection=[('cancel', 'Отменено'), + ('draft', 'Черновик'), + ('posted', 'Проведено')], + string='Статус', default='draft') + prepaid_line = fields.One2many(comodel_name='order.prepaid.line', inverse_name='prepaid_id', string='Строки счета') + + currency_id = fields.Many2one(comodel_name='res.currency', string='Валюта', tracking=True, required=True, readonly=False, + compute='_compute_currency_id', inverse='_inverse_currency_id', + store=True, precompute=True) + partner_bank_id = fields.Many2one(comodel_name='res.partner.bank', string="Банковский счёт получателя") + amount = fields.Monetary(currency_field='currency_id', store=True, readonly=False, + compute='_compute_amount', string='Всего') + + payment_line_ids = fields.One2many(comodel_name='account.payment', inverse_name='prepaid_id', + string='Связанные платежи', compute_sudo=True, store=True) + company_partner_id = fields.Many2one(string='Контакт компании', related='company_id.partner_id') + + payment_state = fields.Selection(selection=[('not_paid', 'Не оплачен'), + ('in_payment', 'В оплате'), + ('paid', 'Оплачено'), + ('partial', 'Частично оплачено'), + ], + string="Статус платежа", readonly=True, copy=False, tracking=True, + compute='_compute_payment_state', store=True) + payment_id = fields.Many2one(comodel_name='account.payment', string='Платеж') + payment_amount = fields.Monetary(currency_field='currency_id', compute='_compute_payment_amount', store=True, string='Выплачено') + amount_sum_line = fields.Monetary(currency_field='currency_id', store=True, readonly=False, + compute='_compute_amount_sum_line', string='Сумма') + + amount_residual = fields.Monetary(currency_field='currency_id', store=True, readonly=False, + compute='_compute_amount_residual', string='Остаток долга', default=0, copy=False) + + all_total = fields.Monetary(currency_field='currency_id', store=True, readonly=True, + compute='_compute_all_total', string='Всего', default=0, copy=False) + + th_field_taxes = fields.Boolean(string='Проверка столбца налогов', compute='_th_field_taxes', store=True) + + @api.depends('prepaid_line.tax_ids') + def _th_field_taxes(self): + for rec in self: + values = rec.prepaid_line.mapped('tax_ids') + if values: + rec.th_field_taxes = True + else: + rec.th_field_taxes = False + + @api.depends('amount') + def _compute_all_total(self): + for rec in self: + if rec.amount > 0: + rec.all_total = -(rec.amount) if rec.advance_type == 'outbound' else rec.amount + else: + rec.all_total = 0 + + @api.depends('partner_id', 'partner_id.display_name') + def _compute_invoice_partner_display_info(self): + for record in self: + vendor_display_name = record.partner_id.display_name if record.partner_id else '' + record.invoice_partner_display_name = vendor_display_name + + @api.depends('amount', 'payment_amount', 'state') + def _compute_amount_residual(self): + for rec in self: + if rec.state == 'posted': + rec.amount_residual = rec.amount - abs(rec.payment_amount) + else: + rec.amount_residual = 0 + + @api.depends('prepaid_line', 'prepaid_line.tax_ids') + def _compute_amount_sum_line(self): + for rec in self: + amount = 0 + for el in rec.prepaid_line: + amount += el.price_subtotal + rec.amount_sum_line = amount + + + @api.depends('payment_amount', 'payment_line_ids.reconciled_statement_line_ids') + def _compute_payment_state(self): + if not self.payment_line_ids: + self.payment_state = 'not_paid' + elif abs(self.payment_amount) != 0: + if abs(self.payment_amount) >= self.amount: + bool = True + for rec in self.payment_line_ids: + if not rec.reconciled_statement_line_ids: + bool = False + break + self.payment_state = 'paid' if bool else 'in_payment' + else: + self.payment_state = 'partial' + else: + self.payment_state = 'not_paid' + + @api.depends('payment_line_ids', 'payment_line_ids.state') + def _compute_payment_amount(self): + for rec in self: + payments = self.env['account.payment'].with_company(rec.company_id) + records = payments.search([('state', '=', 'posted'), + ('prepaid_id', '=', rec.id), + ('company_id', '=', rec.company_id.id)]) + amount = sum(records.mapped('amount_adv_currency')) + rec.payment_amount = amount + + + @api.depends('prepaid_line') + def _compute_amount(self): + for rec in self: + amount = 0 + for el in rec.prepaid_line: + amount += el.price_unit * el.quantity + rec.amount = amount + + @api.depends('company_id') + def _compute_currency_id(self): + for invoice in self: + invoice.currency_id = invoice.company_id.currency_id + + @api.onchange('currency_id') + def _inverse_currency_id(self): + self.currency_id = self.currency_id + + + def action_post(self): + if self.name == 'Draft': + self.name = self.env['ir.sequence'].next_by_code('order.prepaid') + self.state = 'posted' + + def button_draft(self): + self.state = 'draft' + payments = self.env['account.payment'].with_company(self.company_id) + records = payments.search([('prepaid_id', '=', self.id), ('company_id', '=', self.company_id.id)]) + if records: + for el in records: + el.action_draft() + el.action_cancel() + el.unlink() + + + def button_cancel(self): + self.state = 'cancel' + + + def action_register_payment(self): + journals = self.env['account.journal'].with_company(self.company_id.id) + journal = journals.search([('type', 'in', ['bank', 'cash']), ('company_id', '=', self.company_id.id)]) + if journal: + if self.partner_bank_id: + journal_bank = journal.search([('bank_account_id', '=', self.partner_bank_id.id)], limit=1) + journal_id = journal_bank.id if journal_bank else journal[0].id + else: + journal_id = journal[0].id + else: + journal_id = False + + delta_amount = self.amount - abs(self.payment_amount) + default_amount = delta_amount if delta_amount > 0 else 0 + + return { + 'name': 'Регистрация платежа', + 'res_model': 'payment.register.prepaid', + 'view_mode': 'form', + 'views': [[False, 'form']], + 'context': { + 'default_prepaid_id': self.id, + 'default_company_id': self.company_id.id, + 'default_communication': self.name, + 'default_amount': default_amount, + 'default_amount_const': default_amount, + 'default_journal_id': journal_id + }, + 'target': 'new', + 'type': 'ir.actions.act_window', + } + + diff --git a/l10n_ru_advance_payments/models/order_prepaid_line.py b/l10n_ru_advance_payments/models/order_prepaid_line.py new file mode 100644 index 00000000..a1990a2e --- /dev/null +++ b/l10n_ru_advance_payments/models/order_prepaid_line.py @@ -0,0 +1,82 @@ +from odoo import models, fields, api + + +class OrderPrepaidLine(models.Model): + _name = 'order.prepaid.line' + _inherit = "analytic.mixin" + _description = 'Order Prepaid line' + + + product_id = fields.Many2one(comodel_name='product.product', string='Продукт') + name = fields.Char(string='Метка', compute='_compute_name') + label = fields.Char(string='Метка') + account_id = fields.Many2one(comodel_name='account.account', string='Счёт') + quantity = fields.Float(string='Количество', default=1, digits='Product Unit of Measure') + product_uom_id = fields.Many2one(comodel_name='uom.uom', string='Ед. измерения', compute='_compute_product_uom_id') + price_unit = fields.Float(string='Цена', digits='Product Price', default=1) + tax_ids = fields.Many2many(comodel_name='account.tax', string="Налоги") + prepaid_id = fields.Many2one(comodel_name='order.prepaid', string='Авансовый счет') + sale_ids = fields.Many2many(comodel_name='sale.order.line', string='Связные строки заказа') + analytic_distribution = fields.Json(string='Аналитическое распределение') + + + price_subtotal = fields.Monetary( + string='Subtotal', + compute='_compute_totals', store=True, + currency_field='currency_id', + ) + + price_total = fields.Monetary( + string='Total', + compute='_compute_totals', store=True, + currency_field='currency_id', + ) + + currency_id = fields.Many2one( + comodel_name='res.currency', + string='Currency', + compute='_compute_currency_id', store=True, readonly=False, precompute=True, + required=True, + ) + + @api.depends('prepaid_id.currency_id') + def _compute_currency_id(self): + for line in self: + line.currency_id = line.prepaid_id.currency_id + + + @api.depends('quantity', 'price_unit', 'tax_ids', 'currency_id') + def _compute_totals(self): + for line in self: + subtotal = line.quantity * line.price_unit + if line.tax_ids: + taxes_res = line.tax_ids.compute_all( + line.price_unit, + quantity=line.quantity, + currency=line.currency_id, + product=line.product_id, + partner=self.prepaid_id.partner_id, + is_refund=False, + ) + line.price_subtotal = taxes_res['total_excluded'] + line.price_total = taxes_res['total_included'] + else: + line.price_total = line.price_subtotal = subtotal + + + @api.depends('product_id') + def _compute_product_uom_id(self): + for line in self: + if line.product_id: + line.product_uom_id = line.product_id.uom_id + else: + line.product_uom_id = False + + + @api.depends('product_id') + def _compute_name(self): + for line in self: + if line.product_id: + line.name = line.product_id.name + else: + line.name = '' diff --git a/l10n_ru_advance_payments/models/res_company.py b/l10n_ru_advance_payments/models/res_company.py new file mode 100644 index 00000000..77085229 --- /dev/null +++ b/l10n_ru_advance_payments/models/res_company.py @@ -0,0 +1,8 @@ +from odoo import models, fields + + +class ResCompany(models.Model): + _inherit = 'res.company' + + advance_out_id = fields.Many2one(comodel_name='account.account', string='Исходящий счет') + advance_in_id = fields.Many2one(comodel_name='account.account', string='Входящий счет') \ No newline at end of file diff --git a/l10n_ru_advance_payments/models/res_config_settings.py b/l10n_ru_advance_payments/models/res_config_settings.py new file mode 100644 index 00000000..03e3f9c9 --- /dev/null +++ b/l10n_ru_advance_payments/models/res_config_settings.py @@ -0,0 +1,14 @@ +from odoo import models, fields + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + advance_out_id = fields.Many2one(comodel_name='account.account', string='Исходящий счет', related='company_id.advance_out_id',readonly=False) + advance_in_id = fields.Many2one(comodel_name='account.account', string='Входящий счет', related='company_id.advance_in_id',readonly=False) + + + + + + diff --git a/l10n_ru_advance_payments/models/sale_order.py b/l10n_ru_advance_payments/models/sale_order.py new file mode 100644 index 00000000..1bf6cdd5 --- /dev/null +++ b/l10n_ru_advance_payments/models/sale_order.py @@ -0,0 +1,68 @@ +from odoo import models, fields +from odoo.fields import Command + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + prepaid_advance_count = fields.Integer(string='Закупки', compute='_compute_prepaid_advance_count') + + def _compute_prepaid_advance_count(self): + for el in self: + prepaid = self.env['order.prepaid'].search([('sale_order_id', '=', self.id), ('state', '!=', 'cancel')]) + el.prepaid_advance_count = len(prepaid) + + + def action_prepaid_advance(self): + action = self.env['ir.actions.act_window']._for_xml_id('l10n_ru_advance_payments.action_order_prepaid') + prepaid = self.env['order.prepaid'].search([('sale_order_id', '=', self.id), ('state', '!=', 'cancel')]) + if len(prepaid) > 1: + action['domain'] = [('sale_order_id', '=', self.id)] + action['context'] = { + 'group_by': ['advance_type'] + } + elif len(prepaid) == 1: + return { + 'type': 'ir.actions.act_window', + 'res_model': 'order.prepaid', + 'res_id': prepaid.id, + 'view_mode': 'form', + 'view_type': 'form', + 'target': 'self' + } + return action + + + def button_advance(self): + prepaid_vals = { + 'partner_id': self.partner_id.id, + 'company_id': self.company_id.id, + 'sale_order_id': self.id, + 'prepaid_line': [], + } + for line in self.order_line: + elem = self._prepare_line(line) + prepaid_vals['prepaid_line'].append((0, 0, elem)) + prepaid = self.env['order.prepaid'].create(prepaid_vals) + return { + 'type': 'ir.actions.act_window', + 'res_model': 'order.prepaid', + 'res_id': prepaid.id, + 'view_mode': 'form', + 'view_type': 'form', + 'target': 'self' + } + + def _prepare_line(self, line): + res = { + 'product_id': line.product_id.id, + 'product_uom_id': line.product_uom_id.id, + 'quantity': line.product_uom_qty, + 'price_unit': line.price_unit, + 'tax_ids': [(6, 0, line.tax_ids.ids)], + 'sale_ids': [Command.link(line.id)], + } + if line.analytic_distribution: + res['analytic_distribution'] = line.analytic_distribution + return res + diff --git a/l10n_ru_advance_payments/models/sale_order_line.py b/l10n_ru_advance_payments/models/sale_order_line.py new file mode 100644 index 00000000..840af4c2 --- /dev/null +++ b/l10n_ru_advance_payments/models/sale_order_line.py @@ -0,0 +1,9 @@ +from odoo import models, fields + + +class SaleOrderLine(models.Model): + _inherit = 'sale.order.line' + + prepaid_ids = fields.Many2many('order.prepaid.line', string='Связные строки авансовых счетов') + bool_const_bill = fields.Boolean(copy=False) + bool_const_bill_bill = fields.Boolean(copy=False) \ No newline at end of file diff --git a/l10n_ru_advance_payments/report/__init__.py b/l10n_ru_advance_payments/report/__init__.py new file mode 100644 index 00000000..5e8c4e20 --- /dev/null +++ b/l10n_ru_advance_payments/report/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import report_order_prepaid diff --git a/l10n_ru_advance_payments/report/order_prepaid.xml b/l10n_ru_advance_payments/report/order_prepaid.xml new file mode 100644 index 00000000..cbc23a61 --- /dev/null +++ b/l10n_ru_advance_payments/report/order_prepaid.xml @@ -0,0 +1,44 @@ + + + A4 + + A4 + 0 + 0 + Portrait + 7 + 7 + 7 + 7 + + 35 + 75 + + + + Счет по форме 1С + order.prepaid + qweb-pdf + l10n_ru_advance_payments.report_order_prepaid + l10n_ru_advance_payments.report_order_prepaid + 'Счет - %s ' % (str(object.name)+' '+(str(object.partner_id.parent_id.name) if + object.partner_id.parent_id else str(object.partner_id.name))) + + + + report + + + + Счет + order.prepaid + qweb-pdf + l10n_ru_advance_payments.template_order_prepaid_invoice + l10n_ru_advance_payments.template_order_prepaid_invoice + 'Счет - %s ' % ((object.name if object.name else '')+' '+(object.partner_id.parent_id.name if + object.partner_id.parent_id else object.partner_id.name)) + + + report + + \ No newline at end of file diff --git a/l10n_ru_advance_payments/report/report_invoice.xml b/l10n_ru_advance_payments/report/report_invoice.xml new file mode 100644 index 00000000..7d1c5795 --- /dev/null +++ b/l10n_ru_advance_payments/report/report_invoice.xml @@ -0,0 +1,286 @@ + + + + + + diff --git a/l10n_ru_advance_payments/report/report_order_prepaid.py b/l10n_ru_advance_payments/report/report_order_prepaid.py new file mode 100644 index 00000000..a8d0cf1b --- /dev/null +++ b/l10n_ru_advance_payments/report/report_order_prepaid.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from odoo import models +from odoo.addons.l10n_ru_advance_payments.report_helper import QWebHelper + + +class RuOrderPrepaidReport(models.AbstractModel): + _name = 'report.l10n_ru_advance_payments.report_order_prepaid' + + def _get_report_values(self, docids, data=None): + docs = self.env['order.prepaid'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'order.prepaid', + 'docs': docs + } diff --git a/l10n_ru_advance_payments/report/report_order_prepaid.xml b/l10n_ru_advance_payments/report/report_order_prepaid.xml new file mode 100644 index 00000000..8e14ce69 --- /dev/null +++ b/l10n_ru_advance_payments/report/report_order_prepaid.xml @@ -0,0 +1,320 @@ + + + + + + diff --git a/l10n_ru_advance_payments/report_helper.py b/l10n_ru_advance_payments/report_helper.py new file mode 100644 index 00000000..4ae4803b --- /dev/null +++ b/l10n_ru_advance_payments/report_helper.py @@ -0,0 +1,112 @@ +from datetime import datetime +import re +from pytils import numeral, dt +from odoo.tools import pycompat + + +class QWebHelper(object): + + def img(self, img, type='png', width=0, height=0) : + if width : + width = "width='%spx'"%(width) + else : + width = " " + if height : + height = "height='%spx'"%(height) + else : + height = " " + toreturn = ""%( + width, + height, + type, + str(pycompat.to_text(img))) + return toreturn + + def numer(self, name): + if name: + numeration = re.findall(r'\d+$', name) + if numeration: + return numeration[0] + return '' + + def ru_date(self, date): + if date and date != 'False': + return dt.ru_strftime('"%d" %B %Y года', date=datetime.strptime(str(date), + "%Y-%m-%d"), inflected=True) + return '' + + def ru_date2(self, date): + if date and date != 'False': + return dt.ru_strftime('%d %B %Y г.', date=datetime.strptime(str(date), + "%Y-%m-%d %H:%M:%S"), inflected=True) + return '' + + def in_words(self, number): + return numeral.in_words(number) + + def rubles(self, sum): + text_rubles = numeral.rubles(int(sum)) + copeck = round((sum - int(sum))*100) + text_copeck = numeral.choose_plural(int(copeck), ("копейка", "копейки", "копеек")) + return ("%s %02d %s")%(text_rubles, copeck, text_copeck) + + def initials(self, fio): + if fio: + return (fio.split()[0]+' '+''.join([fio[0:1]+'.' for fio in fio.split()[1:]])).strip() + return '' + + def address(self, partner): + repr = [] + if partner.zip: + repr.append(partner.zip) + if partner.country_id: + repr.append(partner.country_id.name) + if partner.state_id: + repr.append(partner.state_id.name) + if partner.city: + repr.append(partner.city) + if partner.street: + repr.append(partner.street) + if partner.street2: + repr.append(partner.street2) + return ', '.join(repr) + + def representation(self, partner): + repr = [] + if partner.name: + repr.append(partner.name) + if partner.inn: + repr.append("ИНН " + partner.inn) + if partner.kpp: + repr.append("КПП " + partner.kpp) + repr.append(self.address(partner)) + return ', '.join(repr) + + def full_representation(self, partner): + repr = [self.representation(partner)] + if partner.phone: + repr.append("тел.: " + partner.phone) + elif partner.parent_id.phone: + repr.append("тел.: " + partner.parent_id.phone) + bank = None + if partner.bank_ids: + bank = partner.bank_ids[0] + elif partner.parent_id.bank_ids: + bank = partner.parent_id.bank_ids[0] + if bank and bank.acc_number: + repr.append("р/сч " + bank.acc_number) + if bank and bank.bank_name: + repr.append("в банке " + bank.bank_name) + if bank and bank.banvk_bic: + repr.append("БИК " + bank.bank_bic) + if bank and bank.bank_corr_acc: + repr.append("к/с " + bank.bank_corr_acc) + return ', '.join(repr) + + def representation_small(self, partner): + repr = [] + if partner.name: + repr.append(partner.name) + + repr.append(self.address(partner)) + return ', '.join(repr) diff --git a/l10n_ru_advance_payments/security/ir.model.access.csv b/l10n_ru_advance_payments/security/ir.model.access.csv new file mode 100644 index 00000000..998ca734 --- /dev/null +++ b/l10n_ru_advance_payments/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_order_prepaid,order.prepaid,model_order_prepaid,base.group_user,1,1,1,1 +access_order_prepaid_line,order.prepaid.line,model_order_prepaid_line,base.group_user,1,1,1,1 +access_payment_register_prepaid,payment.register.prepaid,model_payment_register_prepaid,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/l10n_ru_advance_payments/tests/__init__.py b/l10n_ru_advance_payments/tests/__init__.py new file mode 100644 index 00000000..45bb0f5c --- /dev/null +++ b/l10n_ru_advance_payments/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_advance diff --git a/l10n_ru_advance_payments/tests/test_advance.py b/l10n_ru_advance_payments/tests/test_advance.py new file mode 100644 index 00000000..a3c4c13d --- /dev/null +++ b/l10n_ru_advance_payments/tests/test_advance.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_advance_payments — advance payment invoices. + +Validates: Requirements 14.1, 14.2, 14.3 +""" +from odoo.tests.common import TransactionCase +from odoo.tests import tagged + + +def _get_or_create_partner(env): + """Return an existing company partner or create one.""" + partner = env['res.partner'].search( + [('is_company', '=', True)], limit=1 + ) + if not partner: + partner = env['res.partner'].create({ + 'name': 'Test Partner Advance', + 'is_company': True, + }) + return partner + + +def _get_or_create_contract(env, partner): + """Return an existing contract or create a minimal one.""" + contract = env['partner.contract.customer'].search( + [('partner_id', '=', partner.id)], limit=1 + ) + if not contract: + profile = env['contract.profile'].search([], limit=1) + if not profile: + profile = env['contract.profile'].create({'name': 'Test Profile'}) + contract = env['partner.contract.customer'].create({ + 'date_start': '2024-01-01', + 'date_end': '2024-12-31', + 'type': 'customer', + 'profile_id': profile.id, + 'partner_id': partner.id, + 'partner_type': 'company', + 'company_id': env.company.id, + }) + return contract + + +def _make_prepaid(env, partner=None): + """Create a minimal order.prepaid record.""" + if partner is None: + partner = _get_or_create_partner(env) + return env['order.prepaid'].create({ + 'partner_id': partner.id, + 'company_id': env.company.id, + 'invoice_date': '2024-06-01', + 'invoice_date_due': '2024-06-30', + 'prepaid_line': [(0, 0, { + 'label': 'Аванс', + 'quantity': 1.0, + 'price_unit': 1000.0, + })], + }) + + +@tagged('post_install', '-at_install') +class TestAdvancePayments(TransactionCase): + """ + Tests for advance payment invoices (order.prepaid). + + Validates: Requirements 14.1, 14.2, 14.3 + """ + + def setUp(self): + super().setUp() + self.partner = _get_or_create_partner(self.env) + self.contract = _get_or_create_contract(self.env, self.partner) + self.prepaid = _make_prepaid(self.env, self.partner) + + # ------------------------------------------------------------------ + # Requirement 14.1 — create advance invoice with contract and partner + # ------------------------------------------------------------------ + + def test_create_advance_with_partner_no_error(self): + """ + Req 14.1 — creating an order.prepaid with a partner saves without errors. + """ + self.assertTrue(self.prepaid.id, "order.prepaid should be created with a valid id") + self.assertEqual(self.prepaid.partner_id, self.partner, + "partner_id should match the provided partner") + self.assertEqual(self.prepaid.state, 'draft', + "Newly created prepaid should be in draft state") + + def test_create_advance_with_contract_and_partner_no_error(self): + """ + Req 14.1 — creating an order.prepaid linked to a contract and partner + saves without errors. + """ + prepaid = self.env['order.prepaid'].create({ + 'partner_id': self.partner.id, + 'company_id': self.env.company.id, + 'invoice_date': '2024-07-01', + 'invoice_date_due': '2024-07-31', + 'prepaid_line': [(0, 0, { + 'label': 'Предоплата по договору', + 'quantity': 1.0, + 'price_unit': 5000.0, + })], + }) + self.assertTrue(prepaid.id, "order.prepaid with contract should be created") + self.assertEqual(prepaid.partner_id.id, self.partner.id) + self.assertGreater(prepaid.amount, 0, "Amount should be computed from lines") + + # ------------------------------------------------------------------ + # Requirement 14.2 — printing returns non-empty binary content + # ------------------------------------------------------------------ + + def test_print_advance_report_values_no_exception(self): + """ + Req 14.2 — calling _get_report_values on the advance payment report model + returns a non-empty dict without exceptions. + """ + report_model = self.env['report.l10n_ru_advance_payments.report_order_prepaid'] + result = report_model._get_report_values([self.prepaid.id]) + self.assertIsInstance(result, dict, "Report values should be a dict") + self.assertIn('docs', result, "Report values should contain 'docs' key") + self.assertTrue(result['docs'], "Report docs should be non-empty") + + def test_print_advance_html_render_returns_binary_content(self): + """ + Req 14.2 — rendering the advance payment QWeb template returns + non-empty binary content without exceptions. + """ + html_content, content_type = self.env['ir.actions.report']._render_qweb_html( + 'l10n_ru_advance_payments.report_order_prepaid', [self.prepaid.id] + ) + self.assertTrue(html_content, + "Advance payment HTML render should return non-empty binary content") + self.assertIsInstance(html_content, bytes, "Rendered content should be bytes") + self.assertGreater(len(html_content), 0, "Rendered content should have non-zero length") + + # ------------------------------------------------------------------ + # Requirement 14.3 — registering payment creates account.payment + # ------------------------------------------------------------------ + + def test_register_payment_creates_account_payment(self): + """ + Req 14.3 — using the payment wizard creates a corresponding account.payment record. + """ + # Post the prepaid first + self.prepaid.action_post() + self.assertEqual(self.prepaid.state, 'posted', + "Prepaid should be in posted state after action_post") + + # Find a bank/cash journal + journal = self.env['account.journal'].search( + [('type', 'in', ['bank', 'cash']), + ('company_id', '=', self.env.company.id)], + limit=1 + ) + self.assertTrue(journal, "A bank or cash journal must exist for payment registration") + + # Find a payment method line + payment_method_line = journal.outbound_payment_method_line_ids[:1] + if not payment_method_line: + payment_method_line = journal.inbound_payment_method_line_ids[:1] + self.assertTrue(payment_method_line, + "Journal must have at least one payment method line") + + # Create the wizard directly and call action_create_payments + wizard = self.env['payment.register.prepaid'].create({ + 'prepaid_id': self.prepaid.id, + 'company_id': self.env.company.id, + 'amount': self.prepaid.amount, + 'currency_id': self.prepaid.currency_id.id, + 'payment_date': '2024-06-15', + 'journal_id': journal.id, + 'payment_method_line_id': payment_method_line.id, + 'communication': self.prepaid.name, + }) + + payment_count_before = self.env['account.payment'].search_count( + [('prepaid_id', '=', self.prepaid.id)] + ) + + wizard.action_create_payments() + + payment_count_after = self.env['account.payment'].search_count( + [('prepaid_id', '=', self.prepaid.id)] + ) + self.assertGreater( + payment_count_after, payment_count_before, + "action_create_payments should create a new account.payment linked to the prepaid" + ) + + def test_register_payment_payment_linked_to_prepaid(self): + """ + Req 14.3 — the created account.payment has prepaid_id set to the advance invoice. + """ + self.prepaid.action_post() + + journal = self.env['account.journal'].search( + [('type', 'in', ['bank', 'cash']), + ('company_id', '=', self.env.company.id)], + limit=1 + ) + payment_method_line = ( + journal.outbound_payment_method_line_ids[:1] + or journal.inbound_payment_method_line_ids[:1] + ) + + wizard = self.env['payment.register.prepaid'].create({ + 'prepaid_id': self.prepaid.id, + 'company_id': self.env.company.id, + 'amount': self.prepaid.amount, + 'currency_id': self.prepaid.currency_id.id, + 'payment_date': '2024-06-20', + 'journal_id': journal.id, + 'payment_method_line_id': payment_method_line.id, + 'communication': self.prepaid.name, + }) + wizard.action_create_payments() + + payment = self.env['account.payment'].search( + [('prepaid_id', '=', self.prepaid.id)], limit=1 + ) + self.assertTrue(payment, "An account.payment linked to the prepaid should exist") + self.assertEqual(payment.prepaid_id.id, self.prepaid.id, + "payment.prepaid_id should reference the advance invoice") diff --git a/l10n_ru_advance_payments/views/order_prepaid.xml b/l10n_ru_advance_payments/views/order_prepaid.xml new file mode 100644 index 00000000..5df84eb3 --- /dev/null +++ b/l10n_ru_advance_payments/views/order_prepaid.xml @@ -0,0 +1,135 @@ + + + + Авансовые счета + ir.actions.act_window + order.prepaid + list,form,search + + + + + + Авансовые счета + order.prepaid + + + + + + + + + + + + + + + + + + + Авансовые счета + order.prepaid + +
+
+ +
+ + + + +
+

+ + + Draft + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Всего + + + + + + + + + + + + + + +
+ + + + + + + +
+
+
+
\ No newline at end of file diff --git a/l10n_ru_advance_payments/views/res_config_settings.xml b/l10n_ru_advance_payments/views/res_config_settings.xml new file mode 100644 index 00000000..19532653 --- /dev/null +++ b/l10n_ru_advance_payments/views/res_config_settings.xml @@ -0,0 +1,26 @@ + + + view.res.config.settings.advance + res.config.settings + + + + +
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/l10n_ru_advance_payments/views/sale_order.xml b/l10n_ru_advance_payments/views/sale_order.xml new file mode 100644 index 00000000..cd669c69 --- /dev/null +++ b/l10n_ru_advance_payments/views/sale_order.xml @@ -0,0 +1,18 @@ + + + view.sale.order.form.inherit.button.advance + sale.order + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_advance_payments/wizard/__init__.py b/l10n_ru_advance_payments/wizard/__init__.py new file mode 100644 index 00000000..a9d861b2 --- /dev/null +++ b/l10n_ru_advance_payments/wizard/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import account_payment_register_prepaid diff --git a/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.py b/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.py new file mode 100644 index 00000000..c817a37d --- /dev/null +++ b/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from collections import defaultdict + +from odoo import models, fields, api + + +class AccountPaymentRegisterPrepaid(models.TransientModel): + _name = 'payment.register.prepaid' + _description = 'Регистрация авансовых платежей' + + company_id = fields.Many2one(comodel_name='res.company', string='Компания') + payment_method_line_id = fields.Many2one(comodel_name='account.payment.method.line', string='Метод оплаты', required=True) + partner_bank_id = fields.Many2one(comodel_name='res.partner.bank', string="Банковский счёт получателя") + amount = fields.Monetary(currency_field='currency_id', string='Сумма', readonly=False, required=True) + currency_id = fields.Many2one(comodel_name='res.currency', string='Валюта', required=True) + payment_date = fields.Date(string="Дата платежа", required=True, default=fields.Date.context_today) + journal_id = fields.Many2one(comodel_name='account.journal', string='Журнал', required=True) + communication = fields.Char(string="Заметки") + prepaid_id = fields.Many2one(comodel_name='order.prepaid', string="Авансовый платеж") + advance_type = fields.Selection(selection=[('outbound', 'Входящий'), ('inbound', 'Исходящий')], + string='Тип счета на аванс', related='prepaid_id.advance_type') + method_line_type = fields.Many2one(comodel_name='account.payment.method.line', string="Метод") + amount_const = fields.Float(string='Сумма(Const)') + currency_const = fields.Many2one(comodel_name='res.currency', string='Валюта(Const)') + + @api.onchange('partner_bank_id', 'journal_id') + def currency_bank(self): + if self.partner_bank_id: + self.currency_id = self.partner_bank_id.currency_id + + @api.onchange('currency_id') + def _amount(self): + for wizard in self: + if not wizard.journal_id or not wizard.currency_id or not wizard.payment_date: + wizard.amount = wizard.amount + else: + test = self.prepaid_id.currency_id._convert( + self.amount_const, + self.currency_id, + self.company_id, + self.payment_date, + ) + wizard.amount = test + + @api.onchange('journal_id') + def _payment_method_line_id(self): + journal = self.journal_id + if journal: + if self.advance_type == 'outbound': + self.payment_method_line_id = journal.inbound_payment_method_line_ids[0] if journal.inbound_payment_method_line_ids else False + elif self.advance_type == 'inbound': + self.payment_method_line_id = journal.outbound_payment_method_line_ids[0] if journal.outbound_payment_method_line_ids else False + else: + self.payment_method_line_id = False + else: + self.payment_method_line_id = False + + @api.onchange('journal_id') + def _bank(self): + if self.prepaid_id and self.prepaid_id.partner_bank_id: + self.partner_bank_id = self.prepaid_id.partner_bank_id + elif self.journal_id and self.journal_id.bank_account_id: + self.partner_bank_id = self.journal_id.bank_account_id + else: + self.partner_bank_id = False + + def action_create_payments(self): + prepaid=self.prepaid_id + amount_adv_currency = self.currency_id._convert( + self.amount, + prepaid.currency_id, + self.company_id, + self.payment_date, + ) + payment_vals = { + 'date': self.payment_date, + 'amount': self.amount, + 'payment_type': self.advance_type, + 'memo': self.communication, + 'journal_id': self.journal_id.id, + 'company_id': self.company_id.id, + 'currency_id': self.currency_id.id, + 'partner_id': prepaid.partner_id.id, + 'partner_bank_id': self.partner_bank_id.id, + 'payment_method_line_id': self.payment_method_line_id.id, + 'prepaid_id': prepaid.id, + 'amount_adv_currency': amount_adv_currency, + 'state': 'draft' + } + payment = self.env['account.payment'].create(payment_vals) + prepaid.payment_id = payment.id + payment.action_post() + prepaid._compute_payment_amount() + return { + 'type': 'ir.actions.act_window', + 'res_model': 'account.payment', + 'res_id': payment.id, + 'view_mode': 'form', + 'view_type': 'form', + 'target': 'self' + } + + + diff --git a/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.xml b/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.xml new file mode 100644 index 00000000..1e6a93cd --- /dev/null +++ b/l10n_ru_advance_payments/wizard/account_payment_register_prepaid.xml @@ -0,0 +1,43 @@ + + + + + account.payment.register.prepaid.form + payment.register.prepaid + +
+ + + + + + + + + + + + + + + +
+
+
+
+
+
+
diff --git a/l10n_ru_attorney/README.md b/l10n_ru_attorney/README.md new file mode 100644 index 00000000..58c8d910 --- /dev/null +++ b/l10n_ru_attorney/README.md @@ -0,0 +1,21 @@ +# Российская локализация - Доверенность +name: l10n_ru_attorney + +## Описание +Создание списка доверенностей на получение ТМЦ и их печать. + +###Создание доверенности: +1. Меню Покупки - Доверенности - кнопка "Создать"; +2. На форме указываем: + + 2.1. Контрагент - поставщик; + + 2.2. Заказ на закупку; + + 2.3. Даты действия доверенности ("дата выдачи" и "действительно по"). + + +###Для печати: +1. Меню Настройки - Техническое - Отчеты; +2. Находим в списке l10n_ru_attorney и добавляем в меню "Печать"; +3. Открываем созданную запись доверенности - Действие - "Доверенность". \ No newline at end of file diff --git a/l10n_ru_attorney/__init__.py b/l10n_ru_attorney/__init__.py new file mode 100644 index 00000000..5305644d --- /dev/null +++ b/l10n_ru_attorney/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models \ No newline at end of file diff --git a/l10n_ru_attorney/__manifest__.py b/l10n_ru_attorney/__manifest__.py new file mode 100644 index 00000000..fc49d1b0 --- /dev/null +++ b/l10n_ru_attorney/__manifest__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Российская локализация - Доверенность", + + 'summary': """ + Печать доверенности на получение ТМЦ + """, + + 'description': """ + Создание списка доверенностей на получение ТМЦ и их печать. + + Создание доверенности: + 1. Меню Покупки - Доверенности - кнопка "Создать"; + 2. На форме указываем: + 2.1. Контрагент - поставщик; + 2.2. Заказ на закупку; + 2.3. Даты действия доверенности ("дата выдачи" и "действительно по"). + + Для печати: + 1. Меню Настройки - Техническое - Отчеты; + 2. Находим в списке l10n_ru_attorney и добавляем в меню "Печать"; + 3. Открываем созданную запись доверенности - Действие - "Доверенность". + """, + + 'author': "MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'category': 'Uncategorized', + 'version': '0.1', + + # any module necessary for this one to work correctly + 'depends': ['base', 'account', 'sale', 'purchase', 'hr', 'l10n_ru_base'], + + # always loaded + 'data': [ + 'security/ir.model.access.csv', + 'views/base_consent_views.xml', + 'views/hr_employee_views.xml', + 'views/purchase_order_views.xml', + 'report/consent_report.xml', + ], + 'demo': [ + 'demo/demo.xml', + ], +} diff --git a/l10n_ru_attorney/demo/demo.xml b/l10n_ru_attorney/demo/demo.xml new file mode 100644 index 00000000..4efb1dee --- /dev/null +++ b/l10n_ru_attorney/demo/demo.xml @@ -0,0 +1,36 @@ + + + + + + + ООО "Снабжение Плюс" + + Москва + + + + + Иванов Иван Иванович + Менеджер по закупкам + + + + + + 2026-01-15 10:00:00 + + + + + ДОВ-2026-001 + 2026-01-15 + 2026-07-15 + + + + + + + + diff --git a/l10n_ru_attorney/models/__init__.py b/l10n_ru_attorney/models/__init__.py new file mode 100644 index 00000000..0cad7149 --- /dev/null +++ b/l10n_ru_attorney/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import base_consent +from . import hr_employee +from . import purchase_order \ No newline at end of file diff --git a/l10n_ru_attorney/models/base_consent.py b/l10n_ru_attorney/models/base_consent.py new file mode 100644 index 00000000..a70a0227 --- /dev/null +++ b/l10n_ru_attorney/models/base_consent.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _ +from datetime import datetime, timedelta + + +class BaseConsent(models.Model): + _name = 'base.consent' + _inherit = ['mail.thread', 'utm.mixin'] + _description = 'Consent' + _order = 'date_from desc' + + name = fields.Char(string=_('Номер')) + date_from = fields.Date(string=_('Дата выдачи'), default=lambda self: fields.Datetime.now()) + date_to = fields.Date(string=_('Действительна по'), default=lambda self: datetime.today() + timedelta(days=180)) + partner_id = fields.Many2one('res.partner', string=_('Контрагент'), required=1) + employee_id = fields.Many2one('hr.employee', string=_('Сотрудник'), required=1) + purchaseorder_id = fields.Many2one('purchase.order', _('Заказ на закупку'), domain="[('partner_id','=',partner_id)]", + required=1) + company_id = fields.Many2one('res.company', string=_('Компания'), + default=lambda self: self.env.company, + required=1) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if not vals.get("name"): + vals["name"] = self.env["ir.sequence"].next_by_code("base.consent") + + records = super().create(vals_list) + for record in records: + if record.purchaseorder_id: + record.purchaseorder_id.sudo().write({ + "consent_id": record.id + }) + + return records + + @api.onchange('purchaseorder_id') + def set_partner(self): + if self.purchaseorder_id: + self.partner_id = self.purchaseorder_id.partner_id + + @api.constrains('purchaseorder_id') + def fill_order(self): + p_orders = self.env['purchase.order'].sudo().browse(self.purchaseorder_id.id) + for order in p_orders: + order.consent_id = self.id diff --git a/l10n_ru_attorney/models/hr_employee.py b/l10n_ru_attorney/models/hr_employee.py new file mode 100644 index 00000000..1e632581 --- /dev/null +++ b/l10n_ru_attorney/models/hr_employee.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from odoo import fields, models, _ + + +class HrEmployee(models.Model): + _inherit = 'hr.employee' + + inn = fields.Char(string=_("ИНН")) + pass_kem = fields.Char(string=_("Кем выдан паспорт")) + pass_date = fields.Date(string=_('Дата выдачи паспорта')) diff --git a/l10n_ru_attorney/models/purchase_order.py b/l10n_ru_attorney/models/purchase_order.py new file mode 100644 index 00000000..aa178c66 --- /dev/null +++ b/l10n_ru_attorney/models/purchase_order.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from odoo import fields, models, _ + + +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + consent_id = fields.Many2one('base.consent', string=_('Доверенность')) diff --git a/l10n_ru_attorney/report/consent_report.xml b/l10n_ru_attorney/report/consent_report.xml new file mode 100644 index 00000000..a187e641 --- /dev/null +++ b/l10n_ru_attorney/report/consent_report.xml @@ -0,0 +1,305 @@ + + + + + + + Доверенность + base.consent + (u'Доверенность - %s.pdf' % (object.name)) + + qweb-pdf + l10n_ru_attorney.report_consent + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 15 + 7 + 7 + + 10 + 90 + + + + + diff --git a/l10n_ru_attorney/security/ir.model.access.csv b/l10n_ru_attorney/security/ir.model.access.csv new file mode 100644 index 00000000..ee8128f0 --- /dev/null +++ b/l10n_ru_attorney/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_base_consent,base.consent,model_base_consent,base.group_user,1,1,1,1 diff --git a/l10n_ru_attorney/tests/__init__.py b/l10n_ru_attorney/tests/__init__.py new file mode 100644 index 00000000..fdfe2ba9 --- /dev/null +++ b/l10n_ru_attorney/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_base_consent diff --git a/l10n_ru_attorney/tests/test_base_consent.py b/l10n_ru_attorney/tests/test_base_consent.py new file mode 100644 index 00000000..bba93926 --- /dev/null +++ b/l10n_ru_attorney/tests/test_base_consent.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_attorney — attorney (base.consent) creation, autonumbering, +and linkage to purchase orders. + +Validates: Requirements 17.1, 17.2, 17.3 +""" +from odoo.tests.common import TransactionCase + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _make_partner(env): + """Create a company partner (supplier).""" + return env['res.partner'].create({ + 'name': 'Test Supplier Attorney', + 'is_company': True, + }) + + +def _make_employee(env): + """Create a minimal hr.employee.""" + return env['hr.employee'].create({ + 'name': 'Test Employee Attorney', + }) + + +def _make_purchase_order(env, partner): + """Create a minimal purchase.order.""" + return env['purchase.order'].create({ + 'partner_id': partner.id, + }) + + +def _make_consent(env, partner, employee, purchase_order, name=None): + """Create a base.consent record.""" + vals = { + 'partner_id': partner.id, + 'employee_id': employee.id, + 'purchaseorder_id': purchase_order.id, + } + if name: + vals['name'] = name + return env['base.consent'].create(vals) + + +# --------------------------------------------------------------------------- +# TestBaseConsent +# --------------------------------------------------------------------------- + +class TestBaseConsent(TransactionCase): + """ + Tests for base.consent creation: autonumbering via ir.sequence, + write-back of consent_id to purchase.order, and fill_order constraint. + + Validates: Requirements 17.1, 17.2, 17.3 + """ + + def setUp(self): + super().setUp() + self.partner = _make_partner(self.env) + self.employee = _make_employee(self.env) + self.purchase_order = _make_purchase_order(self.env, self.partner) + + # ------------------------------------------------------------------ + # Requirement 17.1 — autonumber via ir.sequence when name is absent + # ------------------------------------------------------------------ + + def test_create_autonumber(self): + """ + Req 17.1 — creating base.consent without a name assigns a number + via ir.sequence with code 'base.consent'. + """ + consent = _make_consent( + self.env, self.partner, self.employee, self.purchase_order + ) + self.assertTrue( + consent.name, + "consent.name should be set automatically via ir.sequence", + ) + # A manually-supplied name must be preserved as-is + consent2 = _make_consent( + self.env, self.partner, self.employee, self.purchase_order, + name='MANUAL-001', + ) + self.assertEqual( + consent2.name, 'MANUAL-001', + "Explicitly supplied name should not be overwritten", + ) + + # ------------------------------------------------------------------ + # Requirement 17.2 — purchase.order.consent_id set after create + # ------------------------------------------------------------------ + + def test_create_writes_back_to_purchase_order(self): + """ + Req 17.2 — after creating base.consent linked to a purchase.order, + purchase.order.consent_id equals the created consent. + """ + consent = _make_consent( + self.env, self.partner, self.employee, self.purchase_order + ) + self.purchase_order.invalidate_recordset() + self.assertEqual( + self.purchase_order.consent_id.id, + consent.id, + "purchase.order.consent_id should be set to the created consent", + ) + + # ------------------------------------------------------------------ + # Requirement 17.3 — fill_order constraint writes consent_id to order + # ------------------------------------------------------------------ + + def test_constrains_fill_order(self): + """ + Req 17.3 — the @api.constrains('purchaseorder_id') method fill_order + writes consent_id into the linked purchase.order. + """ + # Create a second purchase order to reassign to + second_order = _make_purchase_order(self.env, self.partner) + + consent = _make_consent( + self.env, self.partner, self.employee, self.purchase_order + ) + + # Reassign to second_order — this triggers fill_order constraint + consent.write({'purchaseorder_id': second_order.id}) + + second_order.invalidate_recordset() + self.assertEqual( + second_order.consent_id.id, + consent.id, + "fill_order should write consent_id into the newly assigned purchase.order", + ) diff --git a/l10n_ru_attorney/views/base_consent_views.xml b/l10n_ru_attorney/views/base_consent_views.xml new file mode 100644 index 00000000..359fd6c6 --- /dev/null +++ b/l10n_ru_attorney/views/base_consent_views.xml @@ -0,0 +1,62 @@ + + + + + Consents + base.consent + + + + + + + + + + + + + consent.form + base.consent + +
+
+ + + + + + + + + + + + + + + + + +
+
+ + + Доверенности + base.consent + list,form + + + + + + Consents + base.consent + CON + 5 + + + +
+
diff --git a/l10n_ru_attorney/views/hr_employee_views.xml b/l10n_ru_attorney/views/hr_employee_views.xml new file mode 100644 index 00000000..b0617e1a --- /dev/null +++ b/l10n_ru_attorney/views/hr_employee_views.xml @@ -0,0 +1,19 @@ + + + + + view_employee_form.inherit + hr.employee + + + + + + + + + + + + + diff --git a/l10n_ru_attorney/views/purchase_order_views.xml b/l10n_ru_attorney/views/purchase_order_views.xml new file mode 100644 index 00000000..618e27e9 --- /dev/null +++ b/l10n_ru_attorney/views/purchase_order_views.xml @@ -0,0 +1,16 @@ + + + + + purchase.order.form.inherit + purchase.order + + + + + + + + + diff --git a/l10n_ru_base/README.md b/l10n_ru_base/README.md new file mode 100644 index 00000000..520efe09 --- /dev/null +++ b/l10n_ru_base/README.md @@ -0,0 +1,17 @@ +# Российская локализация - Базовый +name: l10n_ru_base + +## Описание +Российская локализация: основные отчеты и печатные формы. Это базовый модуль для работы с модулями локализации. + +### Для включения модулей: +1. Меню Настройки - в боковом меню "Российская локализация"; +2. Выбирается нужный блок для подключения дополнительных возможностей по локализации. + +### Перечень модулей локализации: +1. Российская локализация - Акт сверки (l10n_ru_act_rev) +2. Российская локализация - Доверенность (l10n_ru_attorney) +3. Российская локализация - Договоры (l10n_ru_contract) +4. Российская локализация - Документы (l10n_ru_doc) +5. Российская локализация - УПД в xml-формате (l10n_ru_upd_xml) +6. Российская локализация - Авансовые платежи (l10n_ru_advance_payments) diff --git a/l10n_ru_base/__init__.py b/l10n_ru_base/__init__.py new file mode 100644 index 00000000..899bcc97 --- /dev/null +++ b/l10n_ru_base/__init__.py @@ -0,0 +1,2 @@ +from . import models + diff --git a/l10n_ru_base/__manifest__.py b/l10n_ru_base/__manifest__.py new file mode 100644 index 00000000..148a0198 --- /dev/null +++ b/l10n_ru_base/__manifest__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Российская локализация - Базовый", + 'summary': """ + Российская локализация: основные отчеты и печатные формы. + """, + + 'description': """ + Российская локализация: основные отчеты и печатные формы. + + Для включения модулей: + 1. Меню Настройки - в боковом меню "Российская локализация" + 2. Выбирается нужный блок. + """, + + 'author': "MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'version': '19.0.2025.11.11', + 'license': 'LGPL-3', + 'category': 'Uncategorized', + + 'depends': [], + + 'data': [ + 'views/res_config_settings_views.xml', + ], +} diff --git a/l10n_ru_base/i18n/ru_RU.po b/l10n_ru_base/i18n/ru_RU.po new file mode 100644 index 00000000..8aaf339f --- /dev/null +++ b/l10n_ru_base/i18n/ru_RU.po @@ -0,0 +1,110 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_russian_localization +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e-20240904\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-29 07:45+0000\n" +"PO-Revision-Date: 2024-10-29 07:45+0000\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_russian_localization +#. odoo-python +#: code:addons/base_russian_localization/models/res_config_settings.py:0 +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_act_revise +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +#, python-format +msgid "Act revise" +msgstr "Акт сверки" + +#. module: base_russian_localization +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__company_status_rf +msgid "Company Status Rf" +msgstr "Статус компании" + +#. module: base_russian_localization +#: model:ir.model,name:base_russian_localization.model_res_config_settings +msgid "Config Settings" +msgstr "Параметры конфигурации" + +#. module: base_russian_localization +#. odoo-python +#: code:addons/base_russian_localization/models/res_config_settings.py:0 +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_fehu_base_consent +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +#, python-format +msgid "Consent" +msgstr "Доверенность" + +#. module: base_russian_localization +#. odoo-python +#: code:addons/base_russian_localization/models/res_config_settings.py:0 +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_contract +#, python-format +msgid "Contract" +msgstr "Договор" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Contracts" +msgstr "Договоры" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Powers of attorney" +msgstr "Доверенность на получение ТМЦ" + +#. module: base_russian_localization +#. odoo-python +#: code:addons/base_russian_localization/models/res_config_settings.py:0 +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_l10n_ru_doc +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +#, python-format +msgid "Print forms" +msgstr "Печатные формы" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Report act revise" +msgstr "Отчет Акт сверки" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Report contract" +msgstr "Договоры" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Report report_xml" +msgstr "УПД в формате xml для ЭДО" + +#. module: base_russian_localization +#. odoo-python +#: code:addons/base_russian_localization/models/res_config_settings.py:0 +#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_report_xml +#, python-format +msgid "Report_xml" +msgstr "Универсальный передаточный документ (УПД) в формате xml для ЭДО" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "Russian Localization" +msgstr "Российская локализация" + + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "UPD xml" +msgstr "УПД в формате xml для ЭДО" + +#. module: base_russian_localization +#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form +msgid "print_forms" +msgstr "Печатные формы документов" diff --git a/l10n_ru_base/models/__init__.py b/l10n_ru_base/models/__init__.py new file mode 100644 index 00000000..4a304019 --- /dev/null +++ b/l10n_ru_base/models/__init__.py @@ -0,0 +1,4 @@ +from . import res_config_settings + + + diff --git a/l10n_ru_base/models/res_config_settings.py b/l10n_ru_base/models/res_config_settings.py new file mode 100644 index 00000000..33fe58df --- /dev/null +++ b/l10n_ru_base/models/res_config_settings.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +_FIELDS_MODUL = [ + 'module_l10n_ru_act_rev', + 'module_l10n_ru_contract', + 'module_l10n_ru_upd_xml', + 'module_l10n_ru_doc', + 'module_l10n_ru_attorney', + 'module_l10n_ru_advance_payments' +] + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + module_l10n_ru_act_rev = fields.Boolean(_("Act revise")) + module_l10n_ru_contract = fields.Boolean(_("Contract")) + module_l10n_ru_upd_xml = fields.Boolean(_("Report_xml")) + module_l10n_ru_doc = fields.Boolean(_("Print forms")) + module_l10n_ru_attorney = fields.Boolean(_("Consent")) + module_l10n_ru_advance_payments = fields.Boolean(_("Advance payments")) + + @api.model + def write(self, values): + company = self.env.company + if company.country_id.code != 'RU': + if any(field in values for field in _FIELDS_MODUL): + raise UserError("Признак Российской компании не обнаружен!") + if _FIELDS_MODUL: + missing_modules = set() + for field in _FIELDS_MODUL: + if self.mapped(field)[0]: + module_name = field[7:] + module_installed = self.env['ir.module.module'].search([('name', '=', module_name)], limit=1) + if not module_installed: + missing_modules.add(module_name) + if missing_modules: + message = "Обратитесь в тех.поддержку для получения лицензии для следующих модулей:\n" + \ + "\n".join(missing_modules) + raise UserError(message) + return super(ResConfigSettings, self).write(values) diff --git a/l10n_ru_base/static/description/icon.png b/l10n_ru_base/static/description/icon.png new file mode 100644 index 00000000..5ea24f8c Binary files /dev/null and b/l10n_ru_base/static/description/icon.png differ diff --git a/l10n_ru_base/views/res_config_settings_views.xml b/l10n_ru_base/views/res_config_settings_views.xml new file mode 100644 index 00000000..57127bb6 --- /dev/null +++ b/l10n_ru_base/views/res_config_settings_views.xml @@ -0,0 +1,66 @@ + + + + + res.config.settings.view.form.inherit.russian.localization + res.config.settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract/.gitignore b/l10n_ru_contract/.gitignore new file mode 100644 index 00000000..b0b6f3a3 --- /dev/null +++ b/l10n_ru_contract/.gitignore @@ -0,0 +1,160 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ \ No newline at end of file diff --git a/l10n_ru_contract/README.md b/l10n_ru_contract/README.md new file mode 100644 index 00000000..6b6074fb --- /dev/null +++ b/l10n_ru_contract/README.md @@ -0,0 +1,30 @@ +# Российская локализация - Договоры +name: l10n_ru_contract + + +## Описание +Создание договоров с клиентами и поставщиками в системе. +Возможность разделения договоров на виды, отслеживание статуса договора. Вы также можете распечатать договор из системы. + +### Создание вида договора клиента(поставщика): +1. Меню Продажи (Покупки) - Договоры - Виды договора - кнопка "Создать"; +2. На форме указываем: + + 2.1. Журнал и счета дебетовой и кредиторской задолженности; + + 2.2. Присваиваем новое название. + +### Создание договора клиента (поставщика): +1. Меню Продажи (Покупки) - Договоры - кнопка "Создать"; +2. На форме указываем основные и дополнительные условия договора: + + 2.1. Контрагент - клиент (поставщик); + + 2.2. Тип контрагента; + + 2.3. Компанию, от лица которой будет подписан договор; + + 2.4. Вид договора. + +### Для печати: +1. Открываем созданную запись договора - Действие - "Договор". \ No newline at end of file diff --git a/l10n_ru_contract/__init__.py b/l10n_ru_contract/__init__.py new file mode 100644 index 00000000..7db66946 --- /dev/null +++ b/l10n_ru_contract/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import models +from . import report diff --git a/l10n_ru_contract/__manifest__.py b/l10n_ru_contract/__manifest__.py new file mode 100644 index 00000000..8b691c56 --- /dev/null +++ b/l10n_ru_contract/__manifest__.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Российская локализация - Договоры', + 'summary': """ + Создание договоров, их видов и печать + """, + + 'description': """ + Создание договоров с клиентами и поставщиками. Возможность разделения на виды договоров, отслеживание статуса договора и его печатью + Создание вида договора клиента(поставщика): + 1. Меню Продажи (Покупки) - Договоры - Виды договора - кнопка "Создать"; + 2. На форме указываем: + 2.1. Журнал и счета дебетовой и кредиторской задолженности; + 2.2. Присваиваем новое название. + + Создание договора клиента (поставщика): + 1. Меню Продажи (Покупки) - Договоры - кнопка "Создать"; + 2. На форме указываем основные и дополнительные условия договора: + 2.1. Контрагент - клиент (поставщик); + 2.2. Тип контрагента; + 2.3. Компанию, от лица которой будет подписан договор; + 2.4. Вид договора. + + Для печати: + 1. Открываем созданную запись договора - Действие - "Договор". + """, + + 'version': '19.0.1.0.0', + 'sequence': 0, + 'author': 'MK.Lab', + 'website': 'https://www.inf-centre.ru/', + 'depends': [ + 'base', + 'mail', + 'l10n_ru_base', + 'report_weasyprint', + ], + "external_dependencies": { + "python": ["weasyprint"], + }, + 'data': [ + 'data/data.xml', + 'report/report_contract_simple.xml', + 'views/contract_customer_view.xml', + "views/contract_header_templates.xml", + 'views/res_company_views.xml', + 'views/res_partner_views.xml', + 'views/contract_profile_views.xml', + 'security/ir.model.access.csv', + 'report/report_contract.xml', + ], + 'demo': [ + 'demo/demo.xml', + ], + 'installable': True, + 'auto_install': False, +} diff --git a/l10n_ru_contract/data/data.xml b/l10n_ru_contract/data/data.xml new file mode 100644 index 00000000..3b1bf110 --- /dev/null +++ b/l10n_ru_contract/data/data.xml @@ -0,0 +1,21 @@ + + + + + Договор последовательность клиент + partner.contract.customer.sequence + + + + 5 + + + Договор последовательность поставщик + partner.contract.supplier.sequence + + + + 5 + + + diff --git a/l10n_ru_contract/demo/demo.xml b/l10n_ru_contract/demo/demo.xml new file mode 100644 index 00000000..cb9413ef --- /dev/null +++ b/l10n_ru_contract/demo/demo.xml @@ -0,0 +1,101 @@ + + + + + + + + + Договор поставки + + + Договор оказания услуг + + + Агентский договор + + + + + Понедельник + + + Среда + + + Пятница + + + + + + + ООО "Торговый Дом Альфа" + + ул. Ленина, д. 10 + Москва + 101000 + 7701234567 + 770101001 + 1027700000001 + 12345678 + + + + + ООО "Производственная Компания Бета" + + пр. Мира, д. 25 + Санкт-Петербург + 190000 + 7802345678 + 780201001 + 1027800000002 + 87654321 + + + + + + + 2026-01-01 + 2026-12-31 + + + + customer + signed + company + + + + + 2026-01-01 + 2026-12-31 + + + + supplier + signed + company + + + + + + 10 + 1.1 + <p>Поставщик обязуется поставить товар в соответствии с условиями настоящего договора.</p> + + + + 20 + 1.2 + <p>Покупатель обязуется принять и оплатить товар в установленные сроки.</p> + + + + + + diff --git a/l10n_ru_contract/models/__init__.py b/l10n_ru_contract/models/__init__.py new file mode 100644 index 00000000..fcb967b4 --- /dev/null +++ b/l10n_ru_contract/models/__init__.py @@ -0,0 +1,9 @@ +from . import partner_contract_customer +from . import dop_field +from . import res_partner +from . import res_partner_bank +from . import res_company +from . import contract_day +from . import contract_allowed_profiles +from . import contract_line +from . import contract_profile \ No newline at end of file diff --git a/l10n_ru_contract/models/account_move.py b/l10n_ru_contract/models/account_move.py new file mode 100644 index 00000000..06cbf321 --- /dev/null +++ b/l10n_ru_contract/models/account_move.py @@ -0,0 +1,50 @@ +from odoo import api, fields, models, exceptions, _ + + +class AccountMove(models.Model): + _inherit = 'account.move' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sf_number = fields.Char(string=_('Номер с/ф')) + osnovanie = fields.Char(string=_('Основание')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + stamp = fields.Boolean(string=_('Печать и подпись'), related='mt_contract_id.stamp') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contract_id') + def set_ons(self): + if self.mt_contract_id: + self.osnovanie = 'Договор № ' + self.mt_contract_id.name + ' от ' + fields.Datetime.from_string( + self.mt_contract_id.date_start).strftime("%d.%m.%Y") + + @api.constrains('state') + def invoice_fields_check(self): + for s in self: + if s.state == 'posted': + if s.mt_contract_id: + errors_list = [] + journal_in_contract = s.mt_contract_id.profile_id.journal_id + payment_term_in_contract = s.mt_contract_id.profile_id.payment_term_id + receivable_in_contract = s.mt_contract_id.profile_id.receivable_account_id + + if journal_in_contract != s.journal_id: + errors_list.append(f'Отличается Журнал - [{s.journal_id.name}] ' + f'и указанный в договоре №{s.mt_contract_id.name} ' + f'Журнал - [{journal_in_contract.name}]\n\n') + + if payment_term_in_contract != s.invoice_payment_term_id: + errors_list.append(f'Отличается поле "Условие оплаты" в инвойсе ' + f'[Условие оплаты - {s.invoice_payment_term_id.name}] ' + f'и указанный в договоре №{s.mt_contract_id.name} ' + f'[Условие оплаты - {payment_term_in_contract.name}]\n\n') + + if receivable_in_contract not in s.line_ids.account_id: + errors_list.append(f'Отличается поле "Счет дебиторской задолженности" в инвойсе ' + f'и указанный в договоре №{s.mt_contract_id.name}') + + if errors_list: + raise exceptions.ValidationError(''.join(errors_list)) \ No newline at end of file diff --git a/l10n_ru_contract/models/contract_allowed_profiles.py b/l10n_ru_contract/models/contract_allowed_profiles.py new file mode 100644 index 00000000..325de2dd --- /dev/null +++ b/l10n_ru_contract/models/contract_allowed_profiles.py @@ -0,0 +1,16 @@ +from odoo import api, fields, models + +class AllowedProfiles(models.Model): + _name = 'contract.allowed.profiles' + name = fields.Char(string='Одновременно включены следующие виды договоров:') + allowed_profiles = fields.Many2many('contract.profile', string='Виды договоров', required=True) + + @api.onchange('allowed_profiles') + def set_name(self): + for s in self: + s.name = '' + for profile in s.allowed_profiles: + s.name += profile.name + ' + ' + if s.name: + if s.name[-2] == '+': + s.name = s.name[:-2] \ No newline at end of file diff --git a/l10n_ru_contract/models/contract_customer.py b/l10n_ru_contract/models/contract_customer.py new file mode 100644 index 00000000..5e6477e7 --- /dev/null +++ b/l10n_ru_contract/models/contract_customer.py @@ -0,0 +1,498 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models, exceptions, tools, _ +import pymorphy2 +from datetime import datetime, timedelta +from dateutil.relativedelta import relativedelta +from .crutch_fields_header import IP_CONTACT_HEADER, ENTITY_CONTRACT_HEADER, INDIVIDUAL_CONTRACT_HEADER +from odoo.exceptions import UserError +import re +import base64 +from io import BytesIO +from docx import Document +from docx.shared import Pt, Inches +from docx.enum.text import WD_ALIGN_PARAGRAPH + + +class PartnerContractCustomer(models.Model): + _name = 'partner.contract.customer' + _inherit = ['mail.thread', 'mail.activity.mixin', 'mail.render.mixin'] + + def get_dateend(self): + for s in self: + if s.date_start: + six_months = fields.Datetime.from_string(s.date_start) + relativedelta(months=+11) + else: + six_months = datetime.today() + relativedelta(months=+11) + return fields.Datetime.to_string(six_months) + + name = fields.Char(string='Номер') + date_start = fields.Date(string='Дата договора', required=True, default=fields.Datetime.now()) + partner_id = fields.Many2one('res.partner', string=_('Контрагент'), required=True) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент как в заказе')) + company_id = fields.Many2one('res.company', string=_('Компания'), required=True) + name_print = fields.Char(string=_('Имя для печати'), compute='_get_name_print') + name_print1 = fields.Char(string=_('Имя для печати, И.П.'), compute='_get_name_printip') + date_end = fields.Date(string=_('Дата окончания'), required=True, default=get_dateend) + name_dirprint = fields.Char(string=_('Имя нашего директора для печати')) + name_dirprint1 = fields.Char(string=_('Имя нашего директора для печати И.П.')) + lines = fields.One2many('contract.line', 'contract_id', string=_('Договорные цены')) + type = fields.Selection( + [('customer', 'С покупателем'), + ('supplier', 'С поставщиком'), + ('other', 'Прочие расчеты'), + + ], + string=_('Тип договора'), default='customer', required=True) + saleorder_id = fields.Many2one('sale.order', string=_('Заказ/Сделка')) + stamp = fields.Boolean(string=_('Печать и подпись')) + signed = fields.Boolean(string=_('Договор подписан')) + state = fields.Selection( + [('draft', 'Черновик'), + ('progress', 'На согласовании'), + ('signed', 'Подписан, действует'), + ('closed', 'Истёк'), + ], + string=_('Статус'), default='draft', group_expand='_expand_states', index=True + ) + is_template = fields.Boolean(_('Это шаблон')) + copy_from = fields.Many2one('partner.contract.customer', string=_('Копировать из этого шаблона')) + profile_id = fields.Many2one('contract.profile', string=_('Вид договора'), required=True) + credit_limit = fields.Float(string=_('Лимит кредита')) + guid_1s = fields.Char(_('Код договора из 1С')) + buh_code = fields.Char(_('Код договора из бухгалтерии')) + payment_term_id = fields.Many2one('account.payment.term', string=_('Условие оплаты')) + manager_id = fields.Many2one('res.users', string=_('Менеджер по продажам')) + accountant_id = fields.Many2one('res.users', string=_('Бухгалтер по взаиморасчетам')) + time_to_delivery_from = fields.Datetime(_('Время доставки от')) + time_to_delivery_to = fields.Datetime(_('Время доставки до')) + day_of_delivery = fields.Float(_('Дни доставки')) + day_of_otgruzki = fields.Float(_('Дни отгрузки')) + + channel_id = fields.Many2one('saleorder.channel', string=_('Канал продаж')) + team_id = fields.Many2one('crm.team', string=_('Команда продаж')) + order_days_ids = fields.Many2many(comodel_name='contract.day', relation='orderdays', string=_('Дни доставки'), + column1='contract_id', column2='day_id') + shipment_days_ids = fields.Many2many(comodel_name='contract.day', relation='shipmentdays', string=_('Дни отгрузки'), + column1='contract_id', + column2='day_id') + # Доработка хедера договора + partner_type = fields.Selection(string=_('Тип контрагента'), selection=[ + ('person', 'Физ. лицо'), + ('company_ip', 'ИП'), + ('company', 'Юр. лицо') + ], required=True) + contract_header = fields.Html(_('Шапка договора')) + + @api.onchange('partner_type') + def generate_contract_header(self): + self.ensure_one() + self.render_model = 'partner.contract.customer' + if self.partner_type == 'company_ip': + self.contract_header = IP_CONTACT_HEADER + elif self.partner_type == 'person': + self.contract_header = INDIVIDUAL_CONTRACT_HEADER + else: + self.contract_header = ENTITY_CONTRACT_HEADER + # # Рендер Jinja выражение типа {{object.field}} + result = self._render_template(self.contract_header, self.render_model, res_ids=[self.id]) + result = tools.html_sanitize(result[self.id]) + self.contract_header = result + + @api.onchange('sec_partner_id') + def set_pid(self): + for s in self: + s.partner_id = s.sec_partner_id.parent_id if s.sec_partner_id.parent_id else s.sec_partner_id + + def _expand_states(self, states, domain, order): + return [key for key, val in type(self).state.selection] + + def copy_it(self): + for s in self: + if s.copy_from: + for line in s.copy_from.lines: + line.copy({'contract_id': s.id}) + + def _get_name_print(self): + morph = pymorphy2.MorphAnalyzer() + for s in self: + s.name_print = False + director = self.env['res.partner'].search([('parent_id', '=', s.partner_id.id), ('type', '=', 'director')], + limit=1) + if director: + if len(director.name.split(' ')) == 3: + lastname_old, firstname_old, middlename_old = director.name.split(' ') + + if lastname_old: + lastname_n = morph.parse(lastname_old)[0] + if lastname_n.inflect({'gent'}): + lastname_n = lastname_n.inflect({'gent'}).word + else: + lastname_n = lastname_old + else: + lastname_n = '' + + if firstname_old: + firstname_n = morph.parse(firstname_old)[0] + firstname_n = firstname_n.inflect({'gent'}).word + else: + firstname_n = '' + + if middlename_old: + middlename_n = morph.parse(middlename_old)[0] + middlename_n = middlename_n.inflect({'gent'}).word + else: + middlename_n = '' + + name_print = lastname_n + ' ' + firstname_n + ' ' + middlename_n + + s.name_print = name_print.title() + + def _get_name_print1(self): + morph = pymorphy2.MorphAnalyzer() + for s in self: + director = s.company_id.chief_id.partner_id if s.company_id.chief_id else False + # raise exceptions.UserError(str(director)) + s.name_dirprint = False + if director: + if len(director.name.split(' ')) == 3: + lastname_old, firstname_old, middlename_old = director.name.split(' ') + + if lastname_old: + lastname_n = morph.parse(lastname_old)[0] + lastname_n = lastname_n.inflect({'gent'}).word + else: + lastname_n = '' + + if firstname_old: + firstname_n = morph.parse(firstname_old)[0] + firstname_n = firstname_n.inflect({'gent'}).word + else: + firstname_n = '' + + if middlename_old: + middlename_n = morph.parse(middlename_old)[0] + middlename_n = middlename_n.inflect({'gent'}).word + else: + middlename_n = '' + + name_print = lastname_n + ' ' + firstname_n + ' ' + middlename_n + + s.name_dirprint = name_print.title() + + @api.model + def create(self, vals_list): + if isinstance(vals_list, dict): + vals_list = [vals_list] + + records = super().create(vals_list) + + for record, vals in zip(records, vals_list): + if vals.get('is_template'): + continue + if vals.get('type') == 'customer': + sequence_code = 'partner.contract.customer.sequence' + elif vals.get('type') == 'supplier': + sequence_code = 'partner.contract.supplier.sequence' + else: + continue + name = self.env['ir.sequence'].next_by_code(sequence_code) + record.name = name + + return records + + # @api.model + def write(self, values): + + if 'state' in values: + if self.state != values['state']: + msg = 'Статус: ' + dict(self._fields['state'].selection).get(self.state) + ' -> ' + dict( + self._fields['state'].selection).get(values['state']) + self.message_post(body=msg) + res = super(PartnerContractCustomer, self).write(values) + return res + + def _get_name_print1ip(self): + for s in self: + s.name_dirprint1 = s.company_id.chief_id.partner_id.name if s.company_id.chief_id else False + + def _get_name_printip(self): + for s in self: + s.name_print1 = False + director = self.env['res.partner'].search([('parent_id', '=', s.partner_id.id), ('type', '=', 'director')], + limit=1) + if director: + s.name_print1 = director.name + + def print_supp(self): + # self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'}) + return self.env['report'].get_action(self, 'mta_base.action_mtacontractsupp_report') + + def print_contract_cust(self): + for s in self: + if s.saleorder_id: + return s.saleorder_id.print_contract() + else: + raise exceptions.UserError( + 'Вы не можете напечатать договор с Клиентом, потому что нет связи с Заказом. Нужно зайти в Заказ и привязать этот договор.') + + def contract_action_confirm(self): + for s in self: + if s.state == 'draft': + s.state = 'progress' + elif s.state == 'progress': + s.state = 'signed' + + def contract_in_draft(self): + for s in self: + s.state = 'draft' + + @api.onchange('name') + def set_comp_and_partn(self): + for s in self: + context = s._context + order_id = context.get('sale_order_id') + if order_id: + sale_order = self.env['sale.order'].browse(order_id) + + s.company_id = sale_order.company_id + s.partner_id = sale_order.partner_id + + @api.onchange('profile_id') + def set_payment(self): + for s in self: + if s.profile_id.payment_term_id: + s.payment_term_id = s.profile_id.payment_term_id + + # @api.constrains('name') + def check_name(self): + obj = self.search([('name', '=', self.name), ('id', '!=', self.id), ('state', '!=', 'closed')]) + if obj: + raise exceptions.ValidationError('Договор с таким номером уже существует') + + """ + @api.constrains('profile_id') + def check_profile_id(self): + contracts = self.search([('partner_id', '=', self.partner_id.id), ('id', '!=', self.id)]) + if contracts: + profiles_in_contracts = contracts.profile_id + # raise exceptions.ValidationError(profiles_in_contracts.ids) + if profiles_in_contracts: + ads = self.env['contract.allowed.profiles'].search( + [('allowed_profiles', 'in', profiles_in_contracts.ids)]) + if ads: + raise exceptions.ValidationError((self.profile_id.name, ads.name)) + # raise exceptions.ValidationError(contracts) + """ + + + def action_report_contract_with_format(self, report_format): + if report_format == 'docx': + file_data, filename = self._generate_contract_docx() + mimetype = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + elif report_format == 'md': + file_data, filename = self._generate_contract_md() + mimetype = 'application/md' + else: + raise UserError("Неверный формат отчёта.") + + attachment = self.env['ir.attachment'].create({ + 'name': filename, + 'datas': base64.b64encode(file_data), + 'res_model': self._name, + 'res_id': self.id, + 'mimetype': mimetype or 'application/octet-stream', + }) + + return { + 'type': 'ir.actions.act_url', + 'url': '/web/content/%s?download=true' % attachment.id, + 'target': 'new', + } + + def _strip_html_tags(self, html): + clean = re.compile('<.*?>') + return re.sub(clean, '', html) + + def _generate_contract_docx(self): + doc = Document() + style = doc.styles['Normal'] + font = style.font + font.name = 'Times New Roman' + font.size = Pt(12) + company = self.env.company + partner = self.partner_id + + table_header = doc.add_table(rows=1, cols=2) + rc_header = table_header.rows[0].cells + run_left = rc_header[0].paragraphs[0].add_run(f"{company.name or ''}") + run_left.font.bold = True + header_paragraph_right = rc_header[1].paragraphs[0] + header_paragraph_right.alignment = WD_ALIGN_PARAGRAPH.RIGHT + header_run_right = header_paragraph_right.add_run(f"Договор {self.name or ''} от {self.date_start or ''}") + header_run_right.font.bold = True + + header_paragraph_centre = doc.add_paragraph(f"Договор №{self.name or ''} от {self.date_start or ''}\n на поставку продукции") + header_paragraph_centre.alignment = WD_ALIGN_PARAGRAPH.CENTER + + table_city_date = doc.add_table(rows=1, cols=2) + row = table_city_date.rows[0].cells + run_city = row[0].paragraphs[0].add_run(company.city or '') + run_city.font.bold = True + paragraph_date = row[1].paragraphs[0] + paragraph_date.alignment = WD_ALIGN_PARAGRAPH.RIGHT + run_date = paragraph_date.add_run(self.get_date_text(self.date_start) or '') + run_date.font.bold = True + + text_contract_header = self._strip_html_tags(self.contract_header) + doc.add_paragraph(text_contract_header) + + for line in self.lines.sorted(key=lambda r: r.sequence, reverse=False): + doc.add_paragraph(line.name or '') + doc.add_paragraph(line.punct or '') + + doc.add_paragraph("Реквизиты и подписи сторон.").alignment = WD_ALIGN_PARAGRAPH.CENTER + + table = doc.add_table(rows=7, cols=6) + table.style = 'Table Grid' + table.cell(0, 0).merge(table.cell(0, 2)).text = "Поставщик:" + table.cell(0, 3).merge(table.cell(0, 5)).text = "Покупатель:" + table.cell(1, 0).merge(table.cell(1, 2)).text = company.name or '' + table.cell(1, 3).merge(table.cell(1, 5)).text = partner.name or '' + table.cell(2, 0).merge(table.cell(2, 2)).text = f"ИНН {company.inn or ''}" + table.cell(2, 3).merge(table.cell(2, 5)).text = f"ИНН {partner.inn or ''}" + table.cell(3, 0).merge(table.cell(3, 1)).text = f"ОГРН {company.partner_id.ogrn or ''}" + table.cell(3, 3).merge(table.cell(3, 5)).text = f"ОГРН {partner.ogrn or ''}" + table.cell(4, 0).merge(table.cell(4, 2)).text = f"КПП {company.kpp or ''}" + table.cell(4, 3).merge(table.cell(4, 5)).text = f"КПП {partner.kpp or ''}" + company_address = self.address(company) or '' + partner_address = self.address(partner) or '' + table.cell(5, 0).merge(table.cell(5, 2)).text = f"Юридический адрес: {company_address}" + table.cell(5, 3).merge(table.cell(5, 5)).text = f"Юридический адрес: {partner_address}" + table.cell(6, 0).merge(table.cell(6, 2)).text = "Подпись Исполнителя:" + table.cell(6, 3).merge(table.cell(6, 5)).text = "Подпись Заказчика:" + + f = BytesIO() + doc.save(f) + f.seek(0) + return f.read(), 'Договор (DOCX).docx' + + + def _generate_contract_md(self): + company = self.env.company + partner = self.partner_id + + lines = [] + + lines.append(f"| **{company.name or ''}** | **Договор {self.name or ''} от {self.date_start or ''}** |") + lines.append("| --- | --- |") + + lines.append(f"**Договор {self.name or ''} от {self.date_start or ''}**\n") + lines.append("**на поставку продукции**\n") + + lines.append("| Город | Дата |") + lines.append("| --- | --- |") + lines.append(f"| {company.city or ''} | {self.get_date_text(self.date_start)} |\n") + + text_contract_header = self._strip_html_tags(self.contract_header or "") + lines.append(text_contract_header + "\n") + + for line in self.lines.sorted(key=lambda r: r.sequence): + lines.append(f"**{line.name or ''}**") + lines.append((line.punct or '') + "\n") + + lines.append("**Реквизиты и подписи сторон.**\n") + + lines.append("| Поставщик | | Покупатель | |") + lines.append("| --- | --- | --- | --- |") + + lines.append(f"| {company.name or ''} | | {partner.name or ''} | |") + lines.append(f"| ИНН {company.inn or ''} | | ИНН {partner.inn or ''} | |") + + lines.append(f"| ОГРН {company.ogrn or ''} | | ОГРН {partner.ogrn or ''} | |") + lines.append(f"| КПП {company.kpp or ''} | | КПП {partner.kpp or ''} | |") + + company_address = self.address(company) or '' + partner_address = self.address(partner) or '' + lines.append(f"| Юридический адрес: {company_address} | | Юридический адрес: {partner_address} | |") + lines.append(f"| Подпись Исполнителя | | Подпись Заказчика | |\n") + + md_content = "\n".join(lines) + return md_content.encode('utf-8'), 'Договор (MD).md' + + def action_print_by_template(self): + return { + 'name': 'Печать по шаблону', + 'type': 'ir.actions.act_window', + 'res_model': 'report.template.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': {'default_contract_id': self.id}, + } + +class Partner(models.Model): + _inherit = 'res.partner' + + contract_count = fields.Integer(string='Договоры', compute='get_count_contract') + pol = fields.Selection(string="Пол", selection=[('m', 'Муж.'), ('j', 'Жен'), ], required=False) + type = fields.Selection(selection_add=[('director', 'Директор')]) + + def get_count_contract(self): + contract = self.env['partner.contract.customer'] + self.contract_count = contract.search_count([('partner_id', '=', self.id)]) + + def action_view_contract(self): + action = self.env.ref('contract.contract_customer_action').read()[0] + + action['domain'] = [('partner_id', '=', self.id)] + + return action + + +class ContractLine(models.Model): + _name = 'contract.line' + contract_id = fields.Many2one('partner.contract.customer', string='Order Reference', required=True, + ondelete='cascade', index=True, copy=False) + _order = "sequence desc" + # name = fields.Text(string='Название для договора') + # price_unit = fields.Float('Цена', default=0.0) + # product_uom = fields.Many2one('uom.uom', string='Единица измерения') + # product_id = fields.Many2one('product.product', string='Услуга', domain=[('sale_ok', '=', True)], change_default=True, ondelete='restrict') + sequence = fields.Integer('Порядок') + name = fields.Char('Номер пункта') + punct = fields.Html('Текст пункта') + + @api.onchange('product_id') + def set_name(self): + for s in self: + s.name = s.product_id.name + + +class AllowedProfiles(models.Model): + _name = 'contract.allowed.profiles' + name = fields.Char(string='Одновременно включены следующие виды договоров:') + allowed_profiles = fields.Many2many('contract.profile', string='Виды договоров', required=True) + + @api.onchange('allowed_profiles') + def set_name(self): + for s in self: + s.name = '' + for profile in s.allowed_profiles: + s.name += profile.name + ' + ' + if s.name: + if s.name[-2] == '+': + s.name = s.name[:-2] + + +class ContractProfile(models.Model): + _name = 'contract.profile' + name = fields.Char(string='Вид договора', required=True) + payable_account_id = fields.Many2one('account.account', string='Счет кредиторской задолженности', required=True) + receivable_account_id = fields.Many2one('account.account', string='Счет дебиторской задолженности', required=True) + max_receivable_id = fields.Float(string='Максимальная деб. задолженность', required=True) + payment_term_id = fields.Many2one('account.payment.term', string='Условие оплаты', required=True) + journal_id = fields.Many2one('account.journal', string='Журнал', required=True) + + +class ContractDay(models.Model): + _name = 'contract.day' + name = fields.Char('День') diff --git a/l10n_ru_contract/models/contract_customer_report_templates.py b/l10n_ru_contract/models/contract_customer_report_templates.py new file mode 100644 index 00000000..becb2f4e --- /dev/null +++ b/l10n_ru_contract/models/contract_customer_report_templates.py @@ -0,0 +1,20 @@ +from odoo import models, fields, api +import os + +class ReportTemplate(models.Model): + _name = 'contract.report.template' + _description = 'Шаблоны отчетов' + + name = fields.Char(string='Название', required=True) + attachment = fields.Binary(string='Файл шаблона', required=True) + attachment_filename = fields.Char(string='Имя файла') + typeformat = fields.Char(string='Формат', compute='_compute_format', store=True) + create_date = fields.Datetime(string='Дата создания', default=fields.Datetime.now) + + @api.depends('attachment_filename') + def _compute_typeformat(self): + for rec in self: + if rec.attachment_filename: + rec.typeformat = os.path.splitext(rec.attachment_filename)[1].lstrip('.').lower() + else: + rec.typeformat = False \ No newline at end of file diff --git a/l10n_ru_contract/models/contract_day.py b/l10n_ru_contract/models/contract_day.py new file mode 100644 index 00000000..8ffd8efe --- /dev/null +++ b/l10n_ru_contract/models/contract_day.py @@ -0,0 +1,5 @@ +from odoo import api, fields, models, exceptions, _ + +class ContractDay(models.Model): + _name = 'contract.day' + name = fields.Char(_('День')) diff --git a/l10n_ru_contract/models/contract_line.py b/l10n_ru_contract/models/contract_line.py new file mode 100644 index 00000000..eacdb7fa --- /dev/null +++ b/l10n_ru_contract/models/contract_line.py @@ -0,0 +1,12 @@ +from odoo import api, fields, models, exceptions, tools, _ + +class ContractLine(models.Model): + _name = 'contract.line' + _order = "sequence desc" + + + contract_id = fields.Many2one('partner.contract.customer', string='Order Reference', required=True, + ondelete='cascade', index=True, copy=False) + sequence = fields.Integer('Порядок') + name = fields.Char('Номер пункта') + punct = fields.Html('Текст пункта') diff --git a/l10n_ru_contract/models/contract_profile.py b/l10n_ru_contract/models/contract_profile.py new file mode 100644 index 00000000..795d25f0 --- /dev/null +++ b/l10n_ru_contract/models/contract_profile.py @@ -0,0 +1,6 @@ +from odoo import api, fields, models, exceptions, _ + +class ContractProfile(models.Model): + _name = 'contract.profile' + + name = fields.Char(string=_('Вид договора'), required=True) diff --git a/l10n_ru_contract/models/crutch_fields_header.py b/l10n_ru_contract/models/crutch_fields_header.py new file mode 100644 index 00000000..f290eff2 --- /dev/null +++ b/l10n_ru_contract/models/crutch_fields_header.py @@ -0,0 +1,33 @@ +ENTITY_CONTRACT_HEADER = """ +{{object.company_id.partner_id.name}}, +именуемое в дальнейшем «Поставщик», в лице +{{(object.company_id.chief_id.partner_id.function or '').lower()}} +{{(object.name_dirprint1 or '').title()}}, + действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и {{object.partner_id.name or ''}}, +именуемое в дальнейшем «Покупатель», в лице +{{(object.get_function_partner1(object.partner_id.id) or '').lower()}} +{{(object.name_print1 or '').title()}}, действующего на основании устава общества, с другой стороны, вместе именуемые в дальнейшем «Стороны» заключили +настоящий Договор о нижеследующем: + """ +IP_CONTACT_HEADER = """ +{{object.company_id.partner_id.name}}, +именуемое в дальнейшем «Поставщик», в лице +{{(object.company_id.chief_id.partner_id.function or '').lower()}} +{{(object.name_dirprint1 or '').title()}}, + действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и {{object.partner_id.name or ''}}, +именуемое в дальнейшем «Покупатель», в лице +{{(object.get_function_partner1(object.partner_id.id) or '').lower()}} +{{(object.name_print1 or '').title()}}, действующего на основании ОГРНИП №{{object.partner_id.ogrn or ''}}, + с другой стороны, вместе именуемые в дальнейшем «Стороны» заключили +настоящий Договор о нижеследующем: +""" + +INDIVIDUAL_CONTRACT_HEADER = """ +{{object.company_id.partner_id.name}}, +именуемое в дальнейшем «Поставщик», в лице +{{(object.company_id.chief_id.partner_id.function or '').lower()}} +{{(object.name_dirprint1 or '').title()}}, + действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и {{object.partner_id.name or ''}}, +именуемое в дальнейшем «Покупатель», вместе именуемые в дальнейшем «Стороны» заключили +настоящий Договор о нижеследующем: + """ diff --git a/l10n_ru_contract/models/dop_field.py b/l10n_ru_contract/models/dop_field.py new file mode 100644 index 00000000..cd4cd596 --- /dev/null +++ b/l10n_ru_contract/models/dop_field.py @@ -0,0 +1,313 @@ +from odoo import models +from datetime import datetime +import re +import pymorphy2 +from odoo.tools import pycompat + +FRACTIONS = ( + (u"десятая", u"десятых", u"десятых"), + (u"сотая", u"сотых", u"сотых"), + (u"тысячная", u"тысячных", u"тысячных"), + (u"десятитысячная", u"десятитысячных", u"десятитысячных"), + (u"стотысячная", u"стотысячных", u"стотысячных"), + (u"миллионная", u"милллионных", u"милллионных"), + (u"десятимиллионная", u"десятимилллионных", u"десятимиллионных"), + (u"стомиллионная", u"стомилллионных", u"стомиллионных"), + (u"миллиардная", u"миллиардных", u"миллиардных"), +) + +ONES = { + 0: (u"", u"", u""), + 1: (u"один", u"одна", u"одно"), + 2: (u"два", u"две", u"два"), + 3: (u"три", u"три", u"три"), + 4: (u"четыре", u"четыре", u"четыре"), + 5: (u"пять", u"пять", u"пять"), + 6: (u"шесть", u"шесть", u"шесть"), + 7: (u"семь", u"семь", u"семь"), + 8: (u"восемь", u"восемь", u"восемь"), + 9: (u"девять", u"девять", u"девять"), +} + +TENS = { + 0: u"", + 10: u"десять", + 11: u"одиннадцать", + 12: u"двенадцать", + 13: u"тринадцать", + 14: u"четырнадцать", + 15: u"пятнадцать", + 16: u"шестнадцать", + 17: u"семнадцать", + 18: u"восемнадцать", + 19: u"девятнадцать", + 2: u"двадцать", + 3: u"тридцать", + 4: u"сорок", + 5: u"пятьдесят", + 6: u"шестьдесят", + 7: u"семьдесят", + 8: u"восемьдесят", + 9: u"девяносто", +} + +HUNDREDS = { + 0: u"", + 1: u"сто", + 2: u"двести", + 3: u"триста", + 4: u"четыреста", + 5: u"пятьсот", + 6: u"шестьсот", + 7: u"семьсот", + 8: u"восемьсот", + 9: u"девятьсот", +} + +MALE = 1 +FEMALE = 2 + +import sys +import types + +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + +class Report_contract_customer(models.Model): + _inherit = 'partner.contract.customer' + + def img(self, img, type='png', width=0, height=0): + if width: + width = "width='%spx'" % (width) + else: + width = " " + if height: + height = "height='%spx'" % (height) + else: + height = " " + toreturn = "" % ( + width, + height, + type, + str(pycompat.to_text(img))) + return toreturn + + def numer(self, name): + if name: + numeration = re.findall('\d+$', name) + if numeration: return numeration[0] + return '' + + def ru_date(self, date): + if date and date != 'False': + return dt.ru_strftime(u'"%d" %B %Y года', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True) + return '' + + def ru_date2(self, date): + if date and date != 'False': + return dt.ru_strftime(u'%d %B %Y г.', date=datetime.strptime(str(date), "%Y-%m-%d %H:%M:%S"), + inflected=True) + return '' + + def in_words(self, number): + return numeral.in_words(number) + + def rubles(self, sum): + "Transform sum number in rubles to text" + text_rubles = self.numeral_rubles(int(sum)) + copeck = round((sum - int(sum)) * 100) + text_copeck = self.numeral_choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек")) + return ("%s %02d %s") % (text_rubles, copeck, text_copeck) + + def numeral_rubles(self, amount, zero_for_kopeck=False): + self.check_positive(amount) + pts = [] + amount = round(amount, 2) + pts.append(self.sum_string(int(amount), 1, (u"рубль", u"рубля", u"рублей"))) + remainder = self._get_float_remainder(amount, 2) + iremainder = int(remainder) + + if iremainder != 0 or zero_for_kopeck: + if iremainder < 10 and len(remainder) == 1: + iremainder *= 10 + pts.append(self.sum_string(iremainder, 2, + (u"копейка", u"копейки", u"копеек"))) + return u" ".join(pts) + + def _get_float_remainder(self, fvalue, signs=9): + self.check_positive(fvalue) + if isinstance(fvalue, integer_types): + return "0" + if isinstance(fvalue, Decimal) and fvalue.as_tuple()[2] == 0: + return "0" + + def sum_string(self, amount, gender, items=None): + if isinstance(items, text_type): + items = split_values(items) + if items is None: + items = (u"", u"", u"") + try: + one_item, two_items, five_items = items + except ValueError: + raise ValueError("Items must be 3-element sequence") + self.check_positive(amount) + if amount == 0: + return u"ноль %s" % five_items + into = u'' + tmp_val = amount + into, tmp_val = self._sum_string_fn(into, tmp_val, gender, items) + into, tmp_val = self._sum_string_fn(into, tmp_val, FEMALE, + (u"тысяча", u"тысячи", u"тысяч")) + into, tmp_val = self._sum_string_fn(into, tmp_val, MALE, + (u"миллион", u"миллиона", u"миллионов")) + into, tmp_val = self._sum_string_fn(into, tmp_val, MALE, + (u"миллиард", u"миллиарда", u"миллиардов")) + if tmp_val == 0: + return into + else: + raise ValueError("Cannot operand with numbers bigger than 10**11") + + def _sum_string_fn(self, into, tmp_val, gender, items=None): + if items is None: + items = (u"", u"", u"") + one_item, two_items, five_items = items + self.check_positive(tmp_val) + if tmp_val == 0: + return into, tmp_val + words = [] + rest = tmp_val % 1000 + tmp_val = tmp_val // 1000 + if rest == 0: + if into == u"": + into = u"%s " % five_items + return into, tmp_val + end_word = five_items + words.append(HUNDREDS[rest // 100]) + rest = rest % 100 + rest1 = rest // 10 + tens = rest1 == 1 and TENS[rest] or TENS[rest1] + words.append(tens) + if rest1 < 1 or rest1 > 1: + amount = rest % 10 + end_word = self.numeral_choose_plural(amount, items) + words.append(ONES[amount][gender - 1]) + words.append(end_word) + words.append(into) + words = filter(lambda x: len(x) > 0, words) + return u" ".join(words).strip(), tmp_val + + def check_positive(self, value, strict=False): + if not strict and value < 0: + raise ValueError("Value must be positive or zero, not %s" % str(value)) + if strict and value <= 0: + raise ValueError("Value must be positive, not %s" % str(value)) + + def numeral_choose_plural(self, amount, variants): + if isinstance(variants, text_type): + variants = split_values(variants) + self.check_length(variants, 3) + amount = abs(amount) + if amount % 10 == 1 and amount % 100 != 11: + variant = 0 + elif amount % 10 >= 2 and amount % 10 <= 4 and \ + (amount % 100 < 10 or amount % 100 >= 20): + variant = 1 + else: + variant = 2 + return variants[variant] + + def check_length(self, value, length): + _length = len(value) + if _length != length: + raise ValueError("length must be %d, not %d" % \ + (length, _length)) + + def initials(self, fio): + if fio: + return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip() + return '' + + def address(self, partner): + repr = [] + if partner.zip: repr.append(partner.zip) + if partner.city: repr.append(partner.city) + if partner.street: repr.append(partner.street) + if partner.street2: repr.append(partner.street2) + return ', '.join(repr) + + def address_delivery(self, partner): + if partner: + addr = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'delivery')], limit=1) + repr = [] + if addr: + if addr.zip: repr.append(addr.zip) + if addr.city: repr.append(addr.city) + if addr.street: repr.append(addr.street) + if addr.street2: repr.append(addr.street2) + return ', '.join(repr) + + def get_function_print(self, function): + morph = pymorphy2.MorphAnalyzer() + if function: + f = morph.parse(function)[0] + f = f.inflect({'gent'}).word + return f.title() + + def get_function_partnerip(self, partner): + director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) + if director: + if director.function: + return director.function + + def get_function_partner(self, partner): + res = [] + morph = pymorphy2.MorphAnalyzer() + if partner: + director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1) + if director: + if director.function: + list_f = str(director.function).split(' ') + for func in list_f: + f = morph.parse(func)[0] + f = f.inflect({'gent'}).word + res.append(f) + return ' '.join(res) + + + + def get_date_text(self, date): + month_list = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', + 'ноября', 'декабря'] + if date: + date_list = str(date).split('-') + if date_list[0] and date_list[1] and date_list[2]: + return ('"' + date_list[2] + '" ' + month_list[int(date_list[1]) - 1] + ' ' + date_list[0] + ' г.') + + def get_bank(self, partner): + repr = [] + bank = None + if partner.bank_ids: + bank = partner.bank_ids[0] + elif partner.parent_id.bank_ids: + bank = partner.parent_id.bank_ids[0] + if bank and bank.bank_name: repr.append(bank.bank_name) + if bank and bank.acc_number: repr.append(u"Р/счет " + bank.acc_number) + if bank and bank.bank_bic: repr.append(u"БИК " + bank.bank_bic) + if bank and bank.bank_corr_acc: repr.append(u"к/с " + bank.bank_corr_acc) + return '
'.join(repr) diff --git a/l10n_ru_contract/models/invoice_saleorder.py b/l10n_ru_contract/models/invoice_saleorder.py new file mode 100644 index 00000000..29309b9f --- /dev/null +++ b/l10n_ru_contract/models/invoice_saleorder.py @@ -0,0 +1,130 @@ +from odoo import api, fields, models, exceptions +from datetime import datetime + + +class contract_sale_order(models.Model): + _inherit = 'sale.order' + mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора') + sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid') + stamp = fields.Boolean(string='Печать и подпись', related='mt_contractid.stamp') + + @api.depends('partner_id') + def get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contractid') + def set_ons(self): + for s in self: + if s.mt_contractid: + s.payment_term_id = s.mt_contractid.payment_term_id + + @api.constrains('state') + def late_payment_check(self): + for s in self: + if s.mt_contractid: + if s.state == 'sale': + late_invoices_count = 0 + max_receivable = s.mt_contractid.profile_id.max_receivable_id # макс. деб. задолженность в договоре + # ищу просроченные инвойсы контрагента указанного в заказе со стейтом "Подтверждено" + invoices_obj = self.env['account.move'].search([('partner_id', '=', s.partner_id.id), + ('state', '=', 'posted'), + ('payment_state', 'not in', ['paid','reversed']), + ('move_type','in',['out_invoice']), + ('invoice_date_due', '<', datetime.now().date())]) + + for invoice in invoices_obj: + late_invoices_count += invoice.amount_residual # складываю деб. задолженность по просроченным инвойсам + + if late_invoices_count > max_receivable: + raise exceptions.ValidationError( + f'Нельзя подтвердить заказ, так как у контрагента {s.sec_partner_id.name} нарушено ' + f'условие по дебиторской задолженности.\n\n' + f'Контрагент {s.sec_partner_id.name} должен {late_invoices_count}руб.\n' + f'Максимальная дебиторская задолженность указанная в ' + f'договоре №{s.mt_contractid.name} - {max_receivable}руб.\n\n' + f'Проверьте следующие неоплаченные счета контрагента:\n' + f'{", ".join([invoice.name for invoice in invoices_obj])}') + + # def _get_invoice_grouping_keys(self): + # res = super(contract_sale_order, self)._get_invoice_grouping_keys() + # res.append('mt_contractid') + # return res + + def _prepare_invoice(self): + invoice_vals = super(contract_sale_order, self)._prepare_invoice() + for s in self: + if s.mt_contractid: + invoice_vals['mt_contractid'] = s.mt_contractid.id + invoice_vals['osnovanie'] = 'Договор № ' + s.mt_contractid.name + ' от ' + fields.Datetime.from_string( + s.mt_contractid.date_start).strftime("%d.%m.%Y") + return invoice_vals + + +class ContractCreateInvoice(models.TransientModel): + _inherit = 'sale.advance.payment.inv' + + def _prepare_invoice_values(self, order, so_lines): + invoice_vals = super(ContractCreateInvoice, self)._prepare_invoice_values(order, so_lines) + if order.mt_contractid: + invoice_vals['mt_contractid'] = order.mt_contractid.id + invoice_vals['osnovanie'] = 'Договор № ' + order.mt_contractid.name + ' от ' + fields.Datetime.from_string(order.mt_contractid.date_start).strftime("%d.%m.%Y") + return invoice_vals + +class contract_invoice(models.Model): + _inherit = 'account.move' + mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора') + sf_number = fields.Char(string='Номер с/ф') + osnovanie = fields.Char(string='Основание') + sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid') + stamp = fields.Boolean(string='Печать и подпись', related='mt_contractid.stamp') + + @api.depends('partner_id') + def get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contractid') + def set_ons(self): + if self.mt_contractid: + self.osnovanie = 'Договор № ' + self.mt_contractid.name + ' от ' + fields.Datetime.from_string( + self.mt_contractid.date_start).strftime("%d.%m.%Y") + + @api.constrains('state') + def invoice_fields_check(self): + for s in self: + if s.state == 'posted': + if s.mt_contractid: + errors_list = [] + journal_in_contract = s.mt_contractid.profile_id.journal_id + payment_term_in_contract = s.mt_contractid.profile_id.payment_term_id + receivable_in_contract = s.mt_contractid.profile_id.receivable_account_id + + if journal_in_contract != s.journal_id: + errors_list.append(f'Отличается Журнал - [{s.journal_id.name}] ' + f'и указанный в договоре №{s.mt_contractid.name} ' + f'Журнал - [{journal_in_contract.name}]\n\n') + + if payment_term_in_contract != s.invoice_payment_term_id: + errors_list.append(f'Отличается поле "Условие оплаты" в инвойсе ' + f'[Условие оплаты - {s.invoice_payment_term_id.name}] ' + f'и указанный в договоре №{s.mt_contractid.name} ' + f'[Условие оплаты - {payment_term_in_contract.name}]\n\n') + + if receivable_in_contract not in s.line_ids.account_id: + errors_list.append(f'Отличается поле "Счет дебиторской задолженности" в инвойсе ' + f'и указанный в договоре №{s.mt_contractid.name}') + + if errors_list: + raise exceptions.ValidationError(''.join(errors_list)) + + +class contact_purchase_order(models.Model): + _inherit = 'purchase.order' + mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора') + sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid') + + @api.depends('partner_id') + def get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id diff --git a/l10n_ru_contract/models/partner_contract_customer.py b/l10n_ru_contract/models/partner_contract_customer.py new file mode 100644 index 00000000..827fde38 --- /dev/null +++ b/l10n_ru_contract/models/partner_contract_customer.py @@ -0,0 +1,231 @@ +from odoo import api, fields, models, tools, _ + +import logging +_logger = logging.getLogger(__name__) + +class PartnerContractCustomer(models.Model): + _name = 'partner.contract.customer' + _inherit = ['mail.thread', 'mail.activity.mixin', 'mail.render.mixin'] + + name = fields.Char(string=_('Номер')) + date_start = fields.Date(string=_('Дата договора'), required=True, default=fields.Datetime.now()) + date_end = fields.Date(string=_('Дата окончания'), required=True) + type = fields.Selection( + [('customer', 'С покупателем'), + ('supplier', 'С поставщиком'), + ('other', 'Прочие расчеты'), + + ], + string=_('Тип договора'), default='customer', required=True) + profile_id = fields.Many2one('contract.profile', string=_('Вид договора'), required=True) + partner_id = fields.Many2one( + 'res.partner', + string='Контрагент', + required=True, + domain="[('id', 'in', possible_partner_ids)]", + ) + + partner_type = fields.Selection(string=_('Тип контрагента'), selection=[ + ('person', 'Физ. лицо'), + ('company_ip', 'ИП'), + ('company', 'Юр. лицо') + ], required=True) + company_id = fields.Many2one('res.company', string=_('Компания'), required=True) + state = fields.Selection( + [ + ('draft', 'Черновик'), + ('progress', 'На согласовании'), + ('signed', 'Подписан, действует'), + ('closed', 'Истёк'), + ], + string=_('Статус'), + default='draft', + group_expand=lambda self, states, domain: [ + key for key, _ in self._fields['state'].selection + ], + ) + stamp = fields.Boolean(string=_('Печать и подпись')) + signed = fields.Boolean(string=_('Договор подписан')) + lines_ids = fields.One2many('contract.line', 'contract_id', string=_('Пункты договора')) + + is_template = fields.Boolean(_('Это шаблон')) + copy_from = fields.Many2one('partner.contract.customer', string=_('Копировать из этого шаблона')) + + director_name_partner = fields.Char( + string=_('ФИО директора (от партнёра)'), + related='partner_id.parent_id.name', + readonly=True, + ) + + director_name_company = fields.Char( + string=_('ФИО руководителя (от компании)'), + related='company_id.chief_id.partner_id.name', + readonly=True, + ) + + contract_header = fields.Html( + string=_("Шапка договора"), + compute="_compute_contract_header", + ) + + contract_header_template_id = fields.Many2one( + "ir.ui.view", + string=_("Шаблон шапки договора"), + domain='[' + '("type", "=", "qweb"), ' + '"|", ' + '"&", ("model", "!=", False), ("model", "=", "partner.contract.customer"), ' + '"&", ("model", "=", False), ("key", "ilike", "l10n_ru_contract.contract_header_")' + ']', + help=_("QWeb-шаблон, по которому генерируется поле «Шапка договора»."), + ) + + use_custom_contract_header = fields.Boolean( + string=_("Использовать кастомный шаблон"), + default=False, + help=_( + "Если включено, шапка договора редактируется вручную и " + "не перегенерируется автоматически при изменении реквизитов." + ), + ) + + possible_partner_ids = fields.Many2many( + 'res.partner', + compute='_compute_possible_partners', + compute_sudo=True, + ) + + @api.depends('partner_type') + def _compute_possible_partners(self): + company_ids = self.env.companies.ids + internal_user_partners = self.env['res.users'].sudo().search([ + ('share', '=', False) + ]).mapped('partner_id.id') + + for rec in self: + if rec.partner_type in ('company', 'company_ip'): + rec.possible_partner_ids = self.env['res.partner'].search([ + ('is_company', '=', True), + ('id', 'not in', company_ids), + ]) + elif rec.partner_type == 'person': + rec.possible_partner_ids = self.env['res.partner'].search([ + ('is_company', '=', False), + ('id', 'not in', internal_user_partners), + ]) + else: + rec.possible_partner_ids = self.env['res.partner'].search([]) + + @api.onchange('partner_type') + def _onchange_partner_type(self): + if self.partner_id: + if self.partner_type in ('company', 'company_ip'): + if not self.partner_id.is_company or self.partner_id.id in self.env.companies.ids: + self.partner_id = False + elif self.partner_type == 'person': + if self.partner_id.is_company or self.partner_id.id in self.env['res.users'].sudo().search( + [('share', '=', False)]).mapped('partner_id.id'): + self.partner_id = False + + def _get_default_header_xmlid(self): + self.ensure_one() + if self.partner_type == "company_ip": + xmlid = "l10n_ru_contract.contract_header_ip" + elif self.partner_type == "person": + xmlid = "l10n_ru_contract.contract_header_individual" + else: + xmlid = "l10n_ru_contract.contract_header_entity" + + return xmlid + + def _render_header_qweb(self): + self.ensure_one() + view = self.contract_header_template_id + if not view: + xmlid = self._get_default_header_xmlid() + view = self.env.ref(xmlid, raise_if_not_found=False) + self.contract_header_template_id = view + try: + html = self.env["ir.qweb"]._render(view.key, {"object": self}) + except Exception as e: + return "" + return tools.html_sanitize(html or "") + + @api.depends( + "partner_type", + "partner_id", + "company_id", + "contract_header_template_id", + "use_custom_contract_header", + ) + def _compute_contract_header(self): + for rec in self: + rec.contract_header = rec._render_header_qweb() + + @api.onchange("partner_type") + def _onchange_partner_type_set_template(self): + for rec in self: + xmlid = rec._get_default_header_xmlid() + view = rec.env.ref(xmlid, raise_if_not_found=False) + rec.contract_header_template_id = view + + def generate_contract_header(self): + for rec in self: + rec.contract_header = rec._render_header_qweb() + + @api.onchange("use_custom_contract_header") + def _onchange_use_custom_contract_header(self): + for rec in self: + if rec.use_custom_contract_header: + if not rec.contract_header: + rec.contract_header = rec._render_header_qweb() + else: + rec.contract_header = rec._render_header_qweb() + + @api.onchange('sec_partner_id') + def set_pid(self): + for s in self: + s.partner_id = s.sec_partner_id.parent_id if s.sec_partner_id.parent_id else s.sec_partner_id + + def copy_it(self): + for s in self: + if s.copy_from: + for line in s.copy_from.lines_ids: + line.copy({'contract_id': s.id}) + + @api.model + def create(self, vals_list): + if not isinstance(vals_list, list): + vals_list = [vals_list] + + for vals in vals_list: + if not vals.get('is_template'): + if vals.get('type') == 'customer': + vals['name'] = self.env['ir.sequence'].next_by_code('partner.contract.customer.sequence') + elif vals.get('type') == 'supplier': + vals['name'] = self.env['ir.sequence'].next_by_code('partner.contract.supplier.sequence') + + records = super().create(vals_list) + return records + + def write(self, values): + + if 'state' in values: + if self.state != values['state']: + msg = 'Статус: ' + dict(self._fields['state'].selection).get(self.state) + ' -> ' + dict( + self._fields['state'].selection).get(values['state']) + self.message_post(body=msg) + return super().write(values) + + + def action_set_on_approval(self): + for rec in self: + rec.state = 'progress' + + def action_confirm(self): + for rec in self: + rec.state = 'signed' + + def action_reset_to_draft(self): + for rec in self: + rec.state = 'draft' \ No newline at end of file diff --git a/l10n_ru_contract/models/purchase_order.py b/l10n_ru_contract/models/purchase_order.py new file mode 100644 index 00000000..d4d5271e --- /dev/null +++ b/l10n_ru_contract/models/purchase_order.py @@ -0,0 +1,13 @@ +from odoo import api, fields, models, exceptions, _ + + +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id diff --git a/l10n_ru_contract/models/res_company.py b/l10n_ru_contract/models/res_company.py new file mode 100644 index 00000000..4d19300e --- /dev/null +++ b/l10n_ru_contract/models/res_company.py @@ -0,0 +1,10 @@ +from odoo import api, fields, models, exceptions, _ + +class Company(models.Model): + _inherit = 'res.company' + + inn = fields.Char(related='partner_id.inn', readonly=False) + kpp = fields.Char(related='partner_id.kpp', readonly=False) + okpo = fields.Char(related='partner_id.okpo', readonly=False) + chief_id = fields.Many2one('res.users', 'Имя директора') + stamp = fields.Binary("Stamp") \ No newline at end of file diff --git a/l10n_ru_contract/models/res_partner.py b/l10n_ru_contract/models/res_partner.py new file mode 100644 index 00000000..e1568c47 --- /dev/null +++ b/l10n_ru_contract/models/res_partner.py @@ -0,0 +1,24 @@ +from odoo import api, fields, models, exceptions, _ + +class Partner(models.Model): + _inherit = 'res.partner' + + ogrn = fields.Char('ОГРН') + okpo = fields.Char('ОКПО') + inn = fields.Char('ИНН') + kpp = fields.Char('KPP') + passport = fields.Char('Паспорт') + + contract_count = fields.Integer(string=_('Договоры'), compute='get_count_contract') + pol = fields.Selection(string=_("Пол"), selection=[('m', 'Муж.'), ('j', 'Жен'), ], required=False) + type = fields.Selection(selection_add=[('director', 'Директор')]) + + def get_count_contract(self): + contract = self.env['partner.contract.customer'] + for s in self: + s.contract_count = contract.search_count([('partner_id', '=', s.id)]) + + def action_view_contract(self): + action = self.env.ref('l10n_ru_contract.contract_customer_action').read()[0] + action['domain'] = [('partner_id', '=', self.id)] + return action \ No newline at end of file diff --git a/l10n_ru_contract/models/res_partner_bank.py b/l10n_ru_contract/models/res_partner_bank.py new file mode 100644 index 00000000..3314fe6c --- /dev/null +++ b/l10n_ru_contract/models/res_partner_bank.py @@ -0,0 +1,6 @@ +from odoo import api, fields, models, exceptions, _ + + +class Partner_Bank(models.Model): + _inherit = 'res.partner.bank' + bank_corr_acc = fields.Char('Кор.счет') \ No newline at end of file diff --git a/l10n_ru_contract/models/sale_make_invoice_advance.py b/l10n_ru_contract/models/sale_make_invoice_advance.py new file mode 100644 index 00000000..e6cae6a5 --- /dev/null +++ b/l10n_ru_contract/models/sale_make_invoice_advance.py @@ -0,0 +1,14 @@ +from odoo import api, fields, models + + +class ContractCreateInvoice(models.TransientModel): + _inherit = 'sale.advance.payment.inv' + + # при выбора счета "Авансовый платеж" + @api.model + def _create_invoice(self, order, so_line, amount): + res = super(ContractCreateInvoice, self)._create_invoice(order, so_line, amount) + if order.mt_contract_id: + res.write({'mt_contract_id': order.mt_contract_id, + 'journal_id': order.mt_contract_id.profile_id.journal_id, }) + return res diff --git a/l10n_ru_contract/models/sale_order.py b/l10n_ru_contract/models/sale_order.py new file mode 100644 index 00000000..53eee3e5 --- /dev/null +++ b/l10n_ru_contract/models/sale_order.py @@ -0,0 +1,53 @@ +from odoo import api, fields, models, exceptions, _ +from datetime import datetime + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + stamp = fields.Boolean(string=_('Печать и подпись'), related='mt_contract_id.stamp') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contract_id') + def set_ons(self): + if self.mt_contract_id: + self.payment_term_id = self.mt_contract_id.payment_term_id + + @api.constrains('state') + def late_payment_check(self): + if self.mt_contract_id: + if self.state == 'sale': + late_invoices_count = 0 + max_receivable = self.mt_contract_id.profile_id.max_receivable_id # макс. деб. задолженность в договоре + # ищу просроченные инвойсы контрагента указанного в заказе со стейтом "Подтверждено" + invoices_obj = self.env['account.move'].search([('partner_id', '=', self.partner_id.id), + ('state', '=', 'posted'), + ('invoice_date_due', '<', datetime.now().date())]) + + for invoice in invoices_obj: + late_invoices_count += invoice.amount_residual # складываю деб. задолженность по просроченным инвойсам + + if late_invoices_count > max_receivable: + raise exceptions.ValidationError( + f'Нельзя подтвердить заказ, так как у контрагента {self.sec_partner_id.name} нарушено ' + f'условие по дебиторской задолженности.\n\n' + f'Контрагент {self.sec_partner_id.name} должен {late_invoices_count}руб.\n' + f'Максимальная дебиторская задолженность указанная в ' + f'договоре №{self.mt_contract_id.name} - {max_receivable}руб.\n\n' + f'Проверьте следующие неоплаченные счета контрагента:\n' + f'{", ".join([invoice.name for invoice in invoices_obj])}') + + # при выбора счета "Обычный счет" + @api.model + def _create_invoices(self, grouped=False, final=False, date=None): + res = super(SaleOrder, self)._create_invoices(grouped, final, date) + if self.mt_contract_id: + res.write({'mt_contract_id': self.mt_contract_id, + 'journal_id': self.mt_contract_id.profile_id.journal_id}) + return res \ No newline at end of file diff --git a/l10n_ru_contract/report/__init__.py b/l10n_ru_contract/report/__init__.py new file mode 100644 index 00000000..ba5ca7c2 --- /dev/null +++ b/l10n_ru_contract/report/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import report_contract diff --git a/l10n_ru_contract/report/report_contract.py b/l10n_ru_contract/report/report_contract.py new file mode 100644 index 00000000..3baf4141 --- /dev/null +++ b/l10n_ru_contract/report/report_contract.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + +class ContractCustomerReport(models.AbstractModel): + _name = 'contract.customer.report' + + + def get_report_values(self, docids, data=None): + docs = self.env['partner.contract.customer'].browse(docids) + return { + 'doc_ids': docs.ids, + 'doc_model': 'partner.contract.customer', + 'docs': docs, + } diff --git a/l10n_ru_contract/report/report_contract.xml b/l10n_ru_contract/report/report_contract.xml new file mode 100644 index 00000000..faf060f3 --- /dev/null +++ b/l10n_ru_contract/report/report_contract.xml @@ -0,0 +1,398 @@ + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Договор + partner.contract.customer + qweb-pdf + l10n_ru_contract.report_contract_customer + l10n_ru_contract.report_contract_customer + 'Договор - %s' % (object.name) + + + report + + + + diff --git a/l10n_ru_contract/report/report_contract_docx.xml b/l10n_ru_contract/report/report_contract_docx.xml new file mode 100644 index 00000000..e8459b9d --- /dev/null +++ b/l10n_ru_contract/report/report_contract_docx.xml @@ -0,0 +1,24 @@ + + + + Договор DOCX + + + code + + action = records.action_report_contract_with_format('docx') + + action + + + + Договор MD + + + code + + action = records.action_report_contract_with_format('md') + + action + + \ No newline at end of file diff --git a/l10n_ru_contract/report/report_contract_invoice.py b/l10n_ru_contract/report/report_contract_invoice.py new file mode 100644 index 00000000..ccb72fca --- /dev/null +++ b/l10n_ru_contract/report/report_contract_invoice.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + + +class ContractCustomerReportInvoice(models.AbstractModel): + _name = 'contract.customer.report_invoice' + + + def get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs, + } diff --git a/l10n_ru_contract/report/report_contract_invoice.xml b/l10n_ru_contract/report/report_contract_invoice.xml new file mode 100644 index 00000000..07d15c4e --- /dev/null +++ b/l10n_ru_contract/report/report_contract_invoice.xml @@ -0,0 +1,592 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Договор со спецификацией + account.move + qweb-pdf + l10n_ru_contract.report_contract_customer_invoice + l10n_ru_contract.report_contract_customer_invoice + 'Договор со спецификацией - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract/report/report_contract_order.py b/l10n_ru_contract/report/report_contract_order.py new file mode 100644 index 00000000..42a679de --- /dev/null +++ b/l10n_ru_contract/report/report_contract_order.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + + +class ContractCustomerReportOrder(models.AbstractModel): + _name = 'contract.customer.report_order' + + + def get_report_values(self, docids, data=None): + docs = self.env['sale.order'].browse(docids) + return { + 'doc_ids': docs.ids, + 'doc_model': 'sale.order', + 'docs': docs, + } + + + diff --git a/l10n_ru_contract/report/report_contract_order.xml b/l10n_ru_contract/report/report_contract_order.xml new file mode 100644 index 00000000..8d288196 --- /dev/null +++ b/l10n_ru_contract/report/report_contract_order.xml @@ -0,0 +1,594 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Договор со спецификацией + sale.order + qweb-pdf + l10n_ru_contract.report_contract_customer_order + l10n_ru_contract.report_contract_customer_order + 'Договор со спецификацией - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract/report/report_contract_order1.xml b/l10n_ru_contract/report/report_contract_order1.xml new file mode 100644 index 00000000..0c79c37d --- /dev/null +++ b/l10n_ru_contract/report/report_contract_order1.xml @@ -0,0 +1,406 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Спецификация + sale.order + qweb-pdf + l10n_ru_contract.report_contract_customer_order1 + l10n_ru_contract.report_contract_customer_order1 + 'Спецификация - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract/report/report_contract_simple.xml b/l10n_ru_contract/report/report_contract_simple.xml new file mode 100644 index 00000000..aa5a4fe7 --- /dev/null +++ b/l10n_ru_contract/report/report_contract_simple.xml @@ -0,0 +1,343 @@ + + + + Договор (WeasyPrint) + partner.contract.customer + qweb-pdf + l10n_ru_contract.report_contract_customer_modern + l10n_ru_contract.report_contract_customer_modern + 'Договор - %s' % (object.name or '') + + True + + + + + diff --git a/l10n_ru_contract/security/ir.model.access.csv b/l10n_ru_contract/security/ir.model.access.csv new file mode 100644 index 00000000..079900a9 --- /dev/null +++ b/l10n_ru_contract/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_partner_contract_customer,access_partner_contract_customer,model_partner_contract_customer,,1,1,1,1 +access_contract_day,access_contract_day,model_contract_day,,1,1,1,1 +access_contract_allowed_profiles,access_contract_allowed_profiles,model_contract_allowed_profiles,,1,1,1,1 +access_partner_contract_customerline,access_partner_contract_customerline,model_contract_line,,1,1,1,1 +access_contract_profile,access_contract_profile,model_contract_profile,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/l10n_ru_contract/tests/__init__.py b/l10n_ru_contract/tests/__init__.py new file mode 100644 index 00000000..3c02082d --- /dev/null +++ b/l10n_ru_contract/tests/__init__.py @@ -0,0 +1 @@ +from . import test_contract diff --git a/l10n_ru_contract/tests/test_contract.py b/l10n_ru_contract/tests/test_contract.py new file mode 100644 index 00000000..a7416f58 --- /dev/null +++ b/l10n_ru_contract/tests/test_contract.py @@ -0,0 +1,215 @@ +""" +Tests for Contract_Model (l10n_ru_contract). + +Validates: Requirements 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 4.10 +""" +from odoo.tests.common import TransactionCase + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_or_create_profile(env): + """Return an existing contract.profile or create a minimal one.""" + profile = env['contract.profile'].search([], limit=1) + if not profile: + profile = env['contract.profile'].create({'name': 'Test Profile'}) + return profile + + +def _get_or_create_partner(env): + """Return an existing external partner or create one.""" + partner = env['res.partner'].search( + [('is_company', '=', True), ('id', 'not in', env.companies.ids)], limit=1 + ) + if not partner: + partner = env['res.partner'].create({'name': 'Test Partner', 'is_company': True}) + return partner + + +def _make_contract(env, **kwargs): + """Create a minimal PartnerContractCustomer record.""" + profile = _get_or_create_profile(env) + partner = _get_or_create_partner(env) + vals = { + 'date_start': '2024-01-01', + 'date_end': '2024-12-31', + 'type': 'customer', + 'profile_id': profile.id, + 'partner_id': partner.id, + 'partner_type': 'company', + 'company_id': env.company.id, + } + vals.update(kwargs) + return env['partner.contract.customer'].create(vals) + + +# --------------------------------------------------------------------------- +# TestContractCreate +# --------------------------------------------------------------------------- + +class TestContractCreate(TransactionCase): + """Validates: Requirement 4.1 — unique contract number assigned via sequence on create.""" + + def test_create_assigns_unique_name_via_sequence(self): + """Req 4.1 — creating a customer contract assigns a non-empty unique name.""" + contract1 = _make_contract(self.env) + contract2 = _make_contract(self.env) + + self.assertTrue(contract1.name, "Contract 1 should have a name assigned") + self.assertTrue(contract2.name, "Contract 2 should have a name assigned") + self.assertNotEqual( + contract1.name, contract2.name, + "Each contract should receive a unique number from the sequence" + ) + + def test_create_supplier_contract_assigns_name(self): + """Req 4.1 — creating a supplier contract also assigns a name via sequence.""" + contract = _make_contract(self.env, type='supplier') + self.assertTrue(contract.name, "Supplier contract should have a name assigned") + + +# --------------------------------------------------------------------------- +# TestContractStates +# --------------------------------------------------------------------------- + +class TestContractStates(TransactionCase): + """Validates: Requirements 4.2, 4.3 — state transitions.""" + + def setUp(self): + super().setUp() + self.contract = _make_contract(self.env) + + def test_contract_action_confirm_draft_to_progress(self): + """Req 4.2 — contract_action_confirm moves draft → progress.""" + self.assertEqual(self.contract.state, 'draft') + self.contract.contract_action_confirm() + self.assertEqual( + self.contract.state, 'progress', + "contract_action_confirm should move draft contract to progress" + ) + + def test_contract_action_confirm_progress_to_signed(self): + """Req 4.2 — second call to contract_action_confirm moves progress → signed.""" + self.contract.contract_action_confirm() # draft → progress + self.contract.contract_action_confirm() # progress → signed + self.assertEqual( + self.contract.state, 'signed', + "Second contract_action_confirm should move progress contract to signed" + ) + + def test_contract_in_draft_returns_to_draft(self): + """Req 4.3 — contract_in_draft moves any state back to draft.""" + self.contract.contract_action_confirm() # draft → progress + self.assertEqual(self.contract.state, 'progress') + + self.contract.contract_in_draft() + self.assertEqual( + self.contract.state, 'draft', + "contract_in_draft should return contract to draft state" + ) + + def test_contract_in_draft_from_signed(self): + """Req 4.3 — contract_in_draft from signed state returns to draft.""" + self.contract.contract_action_confirm() # draft → progress + self.contract.contract_action_confirm() # progress → signed + self.assertEqual(self.contract.state, 'signed') + + self.contract.contract_in_draft() + self.assertEqual( + self.contract.state, 'draft', + "contract_in_draft should return signed contract to draft" + ) + + +# --------------------------------------------------------------------------- +# TestContractHelpers +# --------------------------------------------------------------------------- + +class TestContractHelpers(TransactionCase): + """Validates: Requirements 4.4–4.10 — helper methods on the contract model.""" + + def setUp(self): + super().setUp() + self.contract = _make_contract(self.env, date_start='2024-01-15') + + def test_get_dateend_returns_date_11_months_later(self): + """Req 4.4 — get_dateend returns a date 11 months after date_start.""" + result = self.contract.get_dateend() + self.assertTrue(result, "get_dateend should return a non-empty string") + # date_start = 2024-01-15, +11 months = 2024-12-15 + self.assertIn('2024-12-15', result, + "get_dateend should return date 11 months after date_start") + + def test_initials_full_name(self): + """Req 4.5 — initials('Иванов Иван Иванович') returns 'Иванов И.И.'""" + result = self.contract.initials('Иванов Иван Иванович') + self.assertEqual(result, 'Иванов И.И.', + "initials should format full name as 'Фамилия И.О.'") + + def test_initials_empty_string(self): + """Req 4.5 — initials('') returns empty string.""" + result = self.contract.initials('') + self.assertFalse(result, "initials with empty string should return falsy value") + + def test_ru_date_returns_russian_format(self): + """Req 4.6 — ru_date returns date in Russian format with quoted day.""" + result = self.contract.ru_date('2024-03-15') + self.assertTrue(result, "ru_date should return a non-empty string") + self.assertIn('2024', result, "ru_date result should contain the year") + self.assertIn('15', result, "ru_date result should contain the day") + + def test_rubles_returns_string_with_rubles_word(self): + """Req 4.7 — rubles(1500.50) returns string containing a rubles word.""" + result = self.contract.rubles(1500.50) + self.assertTrue(result, "rubles should return a non-empty string") + has_rubles_word = any( + word in result for word in ('рублей', 'рубля', 'рубль') + ) + self.assertTrue(has_rubles_word, + "rubles result should contain 'рублей', 'рубля', or 'рубль'") + + def test_rubles_1500_50_exact(self): + """Req 4.7 — rubles(1500.50) returns expected Russian text.""" + result = self.contract.rubles(1500.50) + self.assertIn('тысяча', result, "1500 should produce 'тысяча' in result") + self.assertIn('пятьсот', result, "1500 should produce 'пятьсот' in result") + self.assertIn('копеек', result, "0.50 kopecks should appear in result") + + def test_numeral_choose_plural_1_returns_rubly(self): + """Req 4.8 — numeral_choose_plural(1, ...) returns 'рубль'.""" + result = self.contract.numeral_choose_plural(1, ('рубль', 'рубля', 'рублей')) + self.assertEqual(result, 'рубль', + "numeral_choose_plural(1) should return first variant 'рубль'") + + def test_numeral_choose_plural_11_returns_rubley(self): + """Req 4.9 — numeral_choose_plural(11, ...) returns 'рублей'.""" + result = self.contract.numeral_choose_plural(11, ('рубль', 'рубля', 'рублей')) + self.assertEqual(result, 'рублей', + "numeral_choose_plural(11) should return third variant 'рублей'") + + def test_numeral_choose_plural_2_returns_rublya(self): + """numeral_choose_plural(2) returns second variant 'рубля'.""" + result = self.contract.numeral_choose_plural(2, ('рубль', 'рубля', 'рублей')) + self.assertEqual(result, 'рубля', + "numeral_choose_plural(2) should return second variant 'рубля'") + + def test_check_positive_negative_raises_value_error(self): + """Req 4.10 — check_positive with negative number raises ValueError.""" + with self.assertRaises(ValueError): + self.contract.check_positive(-1) + + def test_check_positive_zero_does_not_raise(self): + """check_positive(0) should not raise (non-strict mode).""" + try: + self.contract.check_positive(0) + except ValueError: + self.fail("check_positive(0) should not raise ValueError in non-strict mode") + + def test_check_positive_positive_does_not_raise(self): + """check_positive with positive number should not raise.""" + try: + self.contract.check_positive(100) + except ValueError: + self.fail("check_positive(100) should not raise ValueError") diff --git a/l10n_ru_contract/views/contract_customer_report_tempates_view.xml b/l10n_ru_contract/views/contract_customer_report_tempates_view.xml new file mode 100644 index 00000000..c20fef60 --- /dev/null +++ b/l10n_ru_contract/views/contract_customer_report_tempates_view.xml @@ -0,0 +1,46 @@ + + + + + contract.report.template.tree + contract.report.template + + + + + + + + + + + + contract.report.template.form + contract.report.template + +
+ + + + + + + + +
+
+
+ + + Шаблоны отчетов + contract.report.template + tree,form + +

+ Создайте новый шаблон отчета. +

+
+
+ + +
diff --git a/l10n_ru_contract/views/contract_customer_view.xml b/l10n_ru_contract/views/contract_customer_view.xml new file mode 100644 index 00000000..13163a9e --- /dev/null +++ b/l10n_ru_contract/views/contract_customer_view.xml @@ -0,0 +1,149 @@ + + + + + Договор + partner.contract.customer + +
+
+ +
+ +

+ + + от + + +

+ + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + Договор + partner.contract.customer + + + + + + + + + + + Поиск в договорах + partner.contract.customer + + + + + + + + + + + + + Договоры + ir.actions.act_window + partner.contract.customer + kanban,list,form + +

+ Нет созданных контрактов +

+

+

+
+
+ + + Договор + partner.contract.customer + + + + + + + + + + + +
+
+
+ Номер: +
+
+ Контрагент:
+ Тип:
+ Вид договора: +
+
+ Наша компания: +
+
+
+
+
+
+ + +
+
+
+
diff --git a/l10n_ru_contract/views/contract_header_templates.xml b/l10n_ru_contract/views/contract_header_templates.xml new file mode 100644 index 00000000..36bc1fb1 --- /dev/null +++ b/l10n_ru_contract/views/contract_header_templates.xml @@ -0,0 +1,51 @@ + + + + + + + diff --git a/l10n_ru_contract/views/contract_profile_views.xml b/l10n_ru_contract/views/contract_profile_views.xml new file mode 100644 index 00000000..563d54aa --- /dev/null +++ b/l10n_ru_contract/views/contract_profile_views.xml @@ -0,0 +1,29 @@ + + + contract.profile.form + contract.profile + +
+ + + + + +
+
+
+ + + Виды договоров + ir.actions.act_window + contract.profile + list,form + + + + Настройка одновременно включенных договоров + ir.actions.act_window + contract.allowed.profiles + list,form + +
diff --git a/l10n_ru_contract/views/mail_template.xml b/l10n_ru_contract/views/mail_template.xml new file mode 100644 index 00000000..cd65bf04 --- /dev/null +++ b/l10n_ru_contract/views/mail_template.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ru_contract/views/res_company_views.xml b/l10n_ru_contract/views/res_company_views.xml new file mode 100644 index 00000000..488e3b6f --- /dev/null +++ b/l10n_ru_contract/views/res_company_views.xml @@ -0,0 +1,12 @@ + + + res.company.form.chief.inherit + res.company + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract/views/res_partner_views.xml b/l10n_ru_contract/views/res_partner_views.xml new file mode 100644 index 00000000..84d4c44c --- /dev/null +++ b/l10n_ru_contract/views/res_partner_views.xml @@ -0,0 +1,18 @@ + + + view_partner_form + res.partner + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract/wizard/__init__.py b/l10n_ru_contract/wizard/__init__.py new file mode 100644 index 00000000..d8860bab --- /dev/null +++ b/l10n_ru_contract/wizard/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import report_template_wizard diff --git a/l10n_ru_contract/wizard/report_template_wizard.py b/l10n_ru_contract/wizard/report_template_wizard.py new file mode 100644 index 00000000..e6beff53 --- /dev/null +++ b/l10n_ru_contract/wizard/report_template_wizard.py @@ -0,0 +1,63 @@ +import base64 +from odoo import models, fields, api +from io import BytesIO + +try: + from docxtpl import DocxTemplate +except ImportError: + DocxTemplate = None + +class ReportTemplateWizard(models.TransientModel): + _name = 'report.template.wizard' + _description = 'Визард выбора шаблона для печати договора' + + contract_id = fields.Many2one('model.contract', string='Договор', required=True) + typeformat = fields.Selection([('docx','DOCX'), + ('md','MD') + ], string='Формат', required=True) + template_id = fields.Many2one('contract.report.template', string='Шаблон отчета', required=True) + generated_report = fields.Binary(string='Сформированный отчет') + + def print_report(self): + self.ensure_one() + template = self.template_id + contract = self.contract_id + + if template.format == 'docx': + template_data = base64.b64decode(template.attachment) + docx_io = BytesIO(template_data) + doc = DocxTemplate(docx_io) + + context = { + 'o': contract, + 'user': self.env.user, + 'name': contract.name or '', + } + doc.render(context) + + output_io = BytesIO() + doc.save(output_io) + output_io.seek(0) + + self.generated_report = base64.b64encode(output_io.read()) + self.report_filename = f'{contract.name or "report"}.docx' + + return { + 'type': 'ir.actions.act_url', + 'url': f'/web/content/?model={self._name}&id={self.id}&field=generated_report&filename={self.report_filename}&download=true', + 'target': 'self', + } + + elif template.format == 'md': + md_content = f"# Отчет по договору\n\nНазвание договора: {contract.name or ''}\n" + self.generated_report = base64.b64encode(md_content.encode('utf-8')) + self.report_filename = f'{contract.name or "report"}.md' + + return { + 'type': 'ir.actions.act_url', + 'url': f'/web/content/?model={self._name}&id={self.id}&field=generated_report&filename={self.report_filename}&download=true', + 'target': 'self', + } + + else: + raise UserError('Неподдерживаемый формат шаблона') \ No newline at end of file diff --git a/l10n_ru_contract/wizard/report_template_wizard.xml b/l10n_ru_contract/wizard/report_template_wizard.xml new file mode 100644 index 00000000..14e721be --- /dev/null +++ b/l10n_ru_contract/wizard/report_template_wizard.xml @@ -0,0 +1,19 @@ + + + report.template.wizard.form + report.template.wizard + +
+ + + + + +
+
+
+
+
+
diff --git a/l10n_ru_contract_account/__init__.py b/l10n_ru_contract_account/__init__.py new file mode 100644 index 00000000..a4882d10 --- /dev/null +++ b/l10n_ru_contract_account/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report \ No newline at end of file diff --git a/l10n_ru_contract_account/__manifest__.py b/l10n_ru_contract_account/__manifest__.py new file mode 100644 index 00000000..03a5e5bb --- /dev/null +++ b/l10n_ru_contract_account/__manifest__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Российская локализация - Договоры счета', + 'summary': """ + Создание договоров + """, + + 'description': """ + Создание договоров с клиентами и поставщиками. Адаптация под модуль счетов. + """, + + 'version': '19.0.1.0.0', + 'sequence': 0, + 'author': 'MK.Lab', + 'website': 'https://www.inf-centre.ru/', + 'depends': ['l10n_ru_contract', 'account'], + 'data': [ + 'views/contract_customer_account_views.xml', + 'views/contract_profile.xml', + 'views/account_move_views.xml', + 'report/report_contract_invoice.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/l10n_ru_contract_account/models/__init__.py b/l10n_ru_contract_account/models/__init__.py new file mode 100644 index 00000000..47315735 --- /dev/null +++ b/l10n_ru_contract_account/models/__init__.py @@ -0,0 +1,3 @@ +from . import partner_contract_customer +from . import contract_profile +from . import account_move \ No newline at end of file diff --git a/l10n_ru_contract_account/models/account_move.py b/l10n_ru_contract_account/models/account_move.py new file mode 100644 index 00000000..f16d9485 --- /dev/null +++ b/l10n_ru_contract_account/models/account_move.py @@ -0,0 +1,51 @@ +from odoo import api, fields, models, exceptions, _ + + +class AccountMove(models.Model): + _inherit = 'account.move' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sf_number = fields.Char(string=_('Номер с/ф')) + osnovanie = fields.Char(string=_('Основание')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + stamp = fields.Boolean(string=_('Печать и подпись'), related='mt_contract_id.stamp') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contract_id') + def set_ons(self): + for s in self: + if s.mt_contract_id: + s.osnovanie = 'Договор № ' + s.mt_contract_id.name + ' от ' + fields.Datetime.from_string( + s.mt_contract_id.date_start).strftime("%d.%m.%Y") + + @api.constrains('state') + def invoice_fields_check(self): + for s in self: + if s.state == 'posted': + if s.mt_contract_id: + errors_list = [] + journal_in_contract = s.mt_contract_id.profile_id.journal_id + payment_term_in_contract = s.mt_contract_id.profile_id.payment_term_id + receivable_in_contract = s.mt_contract_id.profile_id.receivable_account_id + + if journal_in_contract != s.journal_id: + errors_list.append(f'Отличается Журнал - [{s.journal_id.name}] ' + f'и указанный в договоре №{s.mt_contract_id.name} ' + f'Журнал - [{journal_in_contract.name}]\n\n') + + if payment_term_in_contract != s.invoice_payment_term_id: + errors_list.append(f'Отличается поле "Условие оплаты" в инвойсе ' + f'[Условие оплаты - {s.invoice_payment_term_id.name}] ' + f'и указанный в договоре №{s.mt_contract_id.name} ' + f'[Условие оплаты - {payment_term_in_contract.name}]\n\n') + + if receivable_in_contract not in s.line_ids.account_id: + errors_list.append(f'Отличается поле "Счет дебиторской задолженности" в инвойсе ' + f'и указанный в договоре №{s.mt_contract_id.name}') + + if errors_list: + raise exceptions.ValidationError(''.join(errors_list)) \ No newline at end of file diff --git a/l10n_ru_contract_account/models/contract_profile.py b/l10n_ru_contract_account/models/contract_profile.py new file mode 100644 index 00000000..bf1f857d --- /dev/null +++ b/l10n_ru_contract_account/models/contract_profile.py @@ -0,0 +1,11 @@ +from odoo import fields, models, _ + + +class ContractProfile(models.Model): + _inherit = 'contract.profile' + + payable_account_id = fields.Many2one('account.account', string=_('Счет кредиторской задолженности'), required=True) + receivable_account_id = fields.Many2one('account.account', string=_('Счет дебиторской задолженности'), required=True) + max_receivable_id = fields.Float(string=_('Максимальная деб. задолженность'), required=True) + payment_term_id = fields.Many2one('account.payment.term', string=_('Условие оплаты'), required=True) + journal_id = fields.Many2one('account.journal', string=_('Журнал'), required=True) \ No newline at end of file diff --git a/l10n_ru_contract_account/models/partner_contract_customer.py b/l10n_ru_contract_account/models/partner_contract_customer.py new file mode 100644 index 00000000..dc58b9d9 --- /dev/null +++ b/l10n_ru_contract_account/models/partner_contract_customer.py @@ -0,0 +1,22 @@ +from odoo import fields, models, _ + +class PartnerContractCustomer(models.Model): + _inherit = "partner.contract.customer" + + sec_partner_id = fields.Many2one( + "res.partner", + string=_("Контрагент как в заказе"), + ) + accountant_id = fields.Many2one( + "res.users", + string=_("Бухгалтер по взаиморасчетам"), + ) + buh_code = fields.Char( + string=_("Код договора из бухгалтерии"), + ) + payment_term_id = fields.Many2one( + "account.payment.term", + string=_("Условие оплаты"), + related="profile_id.payment_term_id", + readonly=False, + ) \ No newline at end of file diff --git a/l10n_ru_contract_account/report/__init__.py b/l10n_ru_contract_account/report/__init__.py new file mode 100644 index 00000000..7313dc3c --- /dev/null +++ b/l10n_ru_contract_account/report/__init__.py @@ -0,0 +1 @@ +from . import report_contract_invoice diff --git a/l10n_ru_contract_account/report/report_contract_invoice.py b/l10n_ru_contract_account/report/report_contract_invoice.py new file mode 100644 index 00000000..ccb72fca --- /dev/null +++ b/l10n_ru_contract_account/report/report_contract_invoice.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + + +class ContractCustomerReportInvoice(models.AbstractModel): + _name = 'contract.customer.report_invoice' + + + def get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs, + } diff --git a/l10n_ru_contract_account/report/report_contract_invoice.xml b/l10n_ru_contract_account/report/report_contract_invoice.xml new file mode 100644 index 00000000..0d6b98cd --- /dev/null +++ b/l10n_ru_contract_account/report/report_contract_invoice.xml @@ -0,0 +1,592 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Договор со спецификацией + account.move + qweb-pdf + l10n_ru_contract.report_contract_customer_invoice + l10n_ru_contract.report_contract_customer_invoice + 'Договор со спецификацией - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract_account/security/ir.model.access.csv b/l10n_ru_contract_account/security/ir.model.access.csv new file mode 100644 index 00000000..bdde9da3 --- /dev/null +++ b/l10n_ru_contract_account/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_contract_profile,access_contract_profile,model_contract_profile,,1,1,1,1 diff --git a/l10n_ru_contract_account/tests/__init__.py b/l10n_ru_contract_account/tests/__init__.py new file mode 100644 index 00000000..4a857c9f --- /dev/null +++ b/l10n_ru_contract_account/tests/__init__.py @@ -0,0 +1 @@ +from . import test_contract_account diff --git a/l10n_ru_contract_account/tests/test_contract_account.py b/l10n_ru_contract_account/tests/test_contract_account.py new file mode 100644 index 00000000..9c5eed0c --- /dev/null +++ b/l10n_ru_contract_account/tests/test_contract_account.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_contract_account — invoice field validation against contract. + +Validates: Requirements 15.1, 15.2, 15.3, 15.4 +""" +from odoo.tests.common import TransactionCase +from odoo.exceptions import ValidationError + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_or_create_partner(env, parent=None): + """Return or create a company partner, optionally with a parent.""" + partner = env['res.partner'].create({ + 'name': 'Test Partner CA', + 'is_company': True, + 'parent_id': parent.id if parent else False, + }) + return partner + + +def _get_or_create_accounts(env): + """Return a receivable and payable account for the current company.""" + receivable = env['account.account'].search([ + ('account_type', '=', 'asset_receivable'), + ('company_ids', 'in', env.company.id), + ], limit=1) + payable = env['account.account'].search([ + ('account_type', '=', 'liability_payable'), + ('company_ids', 'in', env.company.id), + ], limit=1) + return receivable, payable + + +def _get_or_create_journal(env, name='Test Sales Journal CA'): + """Return or create a sales journal.""" + journal = env['account.journal'].search([ + ('type', '=', 'sale'), + ('company_id', '=', env.company.id), + ], limit=1) + if not journal: + journal = env['account.journal'].create({ + 'name': name, + 'type': 'sale', + 'code': 'TSCA', + 'company_id': env.company.id, + }) + return journal + + +def _get_or_create_payment_term(env): + """Return or create a payment term.""" + term = env['account.payment.term'].search([], limit=1) + if not term: + term = env['account.payment.term'].create({'name': 'Immediate CA'}) + return term + + +def _make_profile(env, journal, payment_term, receivable, payable): + """Create a contract.profile with all required account fields.""" + return env['contract.profile'].create({ + 'name': 'Test Profile CA', + 'journal_id': journal.id, + 'payment_term_id': payment_term.id, + 'receivable_account_id': receivable.id, + 'payable_account_id': payable.id, + 'max_receivable_id': 100000.0, + }) + + +def _make_contract(env, partner, profile): + """Create a minimal partner.contract.customer.""" + return env['partner.contract.customer'].create({ + 'date_start': '2024-01-01', + 'date_end': '2024-12-31', + 'type': 'customer', + 'profile_id': profile.id, + 'partner_id': partner.id, + 'partner_type': 'company', + 'company_id': env.company.id, + }) + + +def _make_invoice(env, partner, journal, payment_term, contract, receivable_account): + """Create a draft out_invoice linked to a contract.""" + product = env['product.product'].search([], limit=1) + income_account = env['account.account'].search([ + ('account_type', '=', 'income'), + ('company_ids', 'in', env.company.id), + ], limit=1) + if not income_account: + income_account = receivable_account # fallback + + move = env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner.id, + 'journal_id': journal.id, + 'invoice_payment_term_id': payment_term.id, + 'mt_contract_id': contract.id, + 'invoice_line_ids': [(0, 0, { + 'name': 'Test line', + 'quantity': 1.0, + 'price_unit': 100.0, + 'account_id': income_account.id, + })], + }) + return move + + +# --------------------------------------------------------------------------- +# TestContractAccountMove +# --------------------------------------------------------------------------- + +class TestContractAccountMove(TransactionCase): + """ + Tests for invoice field validation against contract profile. + + Validates: Requirements 15.1, 15.2, 15.3, 15.4 + """ + + def setUp(self): + super().setUp() + self.receivable, self.payable = _get_or_create_accounts(self.env) + self.journal = _get_or_create_journal(self.env) + self.payment_term = _get_or_create_payment_term(self.env) + self.partner = _get_or_create_partner(self.env) + self.profile = _make_profile( + self.env, self.journal, self.payment_term, + self.receivable, self.payable, + ) + self.contract = _make_contract(self.env, self.partner, self.profile) + + # ------------------------------------------------------------------ + # Requirement 15.1 — journal mismatch raises ValidationError on post + # ------------------------------------------------------------------ + + def test_invoice_posted_journal_mismatch_raises(self): + """ + Req 15.1 — posting an invoice whose journal differs from the contract's + profile journal raises ValidationError. + """ + other_journal = self.env['account.journal'].create({ + 'name': 'Other Journal CA', + 'type': 'sale', + 'code': 'OJCA', + 'company_id': self.env.company.id, + }) + invoice = _make_invoice( + self.env, self.partner, other_journal, + self.payment_term, self.contract, self.receivable, + ) + with self.assertRaises(ValidationError): + invoice.action_post() + + # ------------------------------------------------------------------ + # Requirement 15.2 — payment term mismatch raises ValidationError on post + # ------------------------------------------------------------------ + + def test_invoice_posted_payment_term_mismatch_raises(self): + """ + Req 15.2 — posting an invoice whose payment term differs from the + contract's profile payment term raises ValidationError. + """ + other_term = self.env['account.payment.term'].create({ + 'name': 'Other Term CA', + }) + invoice = _make_invoice( + self.env, self.partner, self.journal, + other_term, self.contract, self.receivable, + ) + with self.assertRaises(ValidationError): + invoice.action_post() + + # ------------------------------------------------------------------ + # Requirement 15.3 — matching fields post without errors + # ------------------------------------------------------------------ + + def test_invoice_posted_matching_contract_ok(self): + """ + Req 15.3 — posting an invoice whose journal and payment term match + the contract profile succeeds without errors. + """ + invoice = _make_invoice( + self.env, self.partner, self.journal, + self.payment_term, self.contract, self.receivable, + ) + # Should not raise + invoice.action_post() + self.assertEqual(invoice.state, 'posted', + "Invoice should be in posted state after action_post") + + # ------------------------------------------------------------------ + # Requirement 15.4 — sec_partner_id computed field + # ------------------------------------------------------------------ + + def test_compute_sec_partner_id_with_parent(self): + """ + Req 15.4 — sec_partner_id equals partner_id.parent_id when parent exists. + """ + parent = _get_or_create_partner(self.env) + child = _get_or_create_partner(self.env, parent=parent) + + invoice = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': child.id, + 'journal_id': self.journal.id, + }) + self.assertEqual( + invoice.sec_partner_id, parent, + "sec_partner_id should be partner_id.parent_id when parent exists", + ) + + def test_compute_sec_partner_id_without_parent(self): + """ + Req 15.4 — sec_partner_id equals partner_id when partner has no parent. + """ + invoice = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': self.partner.id, + 'journal_id': self.journal.id, + }) + self.assertEqual( + invoice.sec_partner_id, self.partner, + "sec_partner_id should equal partner_id when no parent exists", + ) diff --git a/l10n_ru_contract_account/views/account_move_views.xml b/l10n_ru_contract_account/views/account_move_views.xml new file mode 100644 index 00000000..7c95a986 --- /dev/null +++ b/l10n_ru_contract_account/views/account_move_views.xml @@ -0,0 +1,20 @@ + + + view_invoice_form + account.move + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract_account/views/contract_customer_account_views.xml b/l10n_ru_contract_account/views/contract_customer_account_views.xml new file mode 100644 index 00000000..eb88e4dc --- /dev/null +++ b/l10n_ru_contract_account/views/contract_customer_account_views.xml @@ -0,0 +1,27 @@ + + + + partner.contract.customer.form.account + partner.contract.customer + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ru_contract_account/views/contract_profile.xml b/l10n_ru_contract_account/views/contract_profile.xml new file mode 100644 index 00000000..7908bbcf --- /dev/null +++ b/l10n_ru_contract_account/views/contract_profile.xml @@ -0,0 +1,22 @@ + + + contract.profile.form.account + contract.profile + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract_purchase/__init__.py b/l10n_ru_contract_purchase/__init__.py new file mode 100644 index 00000000..9a7e03ed --- /dev/null +++ b/l10n_ru_contract_purchase/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/l10n_ru_contract_purchase/__manifest__.py b/l10n_ru_contract_purchase/__manifest__.py new file mode 100644 index 00000000..886030ed --- /dev/null +++ b/l10n_ru_contract_purchase/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': 'Российская локализация - Договоры Закупки', + 'summary': """ + Создание договоров, их видов и печать. Адаптация под модуль закупок + """, + 'description': """ + Создание договоров с клиентами и поставщиками. Адаптация под модуль закупок. + """, + 'version': '19.0.1.0.0', + 'sequence': 0, + 'author': 'MK.Lab', + 'website': 'https://www.inf-centre.ru/', + 'depends': ['l10n_ru_contract_account', 'purchase'], + 'data': [ + 'views/contract_customer_account_views.xml', + 'views/purchase_order_views.xml', + ], + 'installable': True, +} diff --git a/l10n_ru_contract_purchase/models/__init__.py b/l10n_ru_contract_purchase/models/__init__.py new file mode 100644 index 00000000..c91c4dac --- /dev/null +++ b/l10n_ru_contract_purchase/models/__init__.py @@ -0,0 +1 @@ +from . import purchase_order \ No newline at end of file diff --git a/l10n_ru_contract_purchase/models/purchase_order.py b/l10n_ru_contract_purchase/models/purchase_order.py new file mode 100644 index 00000000..5fb754fb --- /dev/null +++ b/l10n_ru_contract_purchase/models/purchase_order.py @@ -0,0 +1,13 @@ +from odoo import api, fields, models, _ + + +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id diff --git a/l10n_ru_contract_purchase/views/contract_customer_account_views.xml b/l10n_ru_contract_purchase/views/contract_customer_account_views.xml new file mode 100644 index 00000000..33219eb6 --- /dev/null +++ b/l10n_ru_contract_purchase/views/contract_customer_account_views.xml @@ -0,0 +1,29 @@ + + + + + + Договоры + ir.actions.act_window + partner.contract.customer + kanban,list,form + [('type', '=', 'supplier')] + + +

+ Нет созданных контрактов +

+

+

+
+
+ + + + + + +
diff --git a/l10n_ru_contract_purchase/views/purchase_order_views.xml b/l10n_ru_contract_purchase/views/purchase_order_views.xml new file mode 100644 index 00000000..c77c10be --- /dev/null +++ b/l10n_ru_contract_purchase/views/purchase_order_views.xml @@ -0,0 +1,15 @@ + + + view_purchaseorder_formcontr + purchase.order + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract_sale/__init__.py b/l10n_ru_contract_sale/__init__.py new file mode 100644 index 00000000..a4882d10 --- /dev/null +++ b/l10n_ru_contract_sale/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report \ No newline at end of file diff --git a/l10n_ru_contract_sale/__manifest__.py b/l10n_ru_contract_sale/__manifest__.py new file mode 100644 index 00000000..ba792bc7 --- /dev/null +++ b/l10n_ru_contract_sale/__manifest__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Российская локализация - Договоры Продажи', + 'summary': """ + Создание договоров, их видов и печать + """, + + 'description': """ + Создание договоров с клиентами и поставщиками. Адаптация под модуль продаж. + """, + + 'version': '19.0.1.0.0', + 'sequence': 0, + 'author': 'MK.Lab', + 'website': 'https://www.inf-centre.ru/', + 'depends': ['l10n_ru_contract_account','sale', 'sale_management'], + 'data': [ + 'views/contract_customer_account_views.xml', + 'views/sale_order_views.xml', + 'report/report_contract_order.xml', + 'report/report_contract_order1.xml', + ], + 'installable': True, + 'demo': [ + 'demo/demo.xml', + ], +} diff --git a/l10n_ru_contract_sale/demo/demo.xml b/l10n_ru_contract_sale/demo/demo.xml new file mode 100644 index 00000000..dce2626d --- /dev/null +++ b/l10n_ru_contract_sale/demo/demo.xml @@ -0,0 +1,21 @@ + + + + + + + + + + 2026-02-01 10:00:00 + + + + + + 5.0 + 15000.0 + + + + diff --git a/l10n_ru_contract_sale/models/__init__.py b/l10n_ru_contract_sale/models/__init__.py new file mode 100644 index 00000000..d3ce4d0a --- /dev/null +++ b/l10n_ru_contract_sale/models/__init__.py @@ -0,0 +1,3 @@ +from . import sale_make_invoice_advance +from . import sale_order +from . import partner_contract_customer \ No newline at end of file diff --git a/l10n_ru_contract_sale/models/partner_contract_customer.py b/l10n_ru_contract_sale/models/partner_contract_customer.py new file mode 100644 index 00000000..6884b447 --- /dev/null +++ b/l10n_ru_contract_sale/models/partner_contract_customer.py @@ -0,0 +1,17 @@ +from odoo import api, fields, models, exceptions, _ + +class PartnerContractCustomer(models.Model): + _inherit = "partner.contract.customer" + + sale_order_id = fields.Many2one( + "sale.order", + string=_("Заказ/Сделка"), + ) + manager_id = fields.Many2one( + "res.users", + string=_("Менеджер по продажам"), + ) + team_id = fields.Many2one( + "crm.team", + string=_("Команда продаж"), + ) diff --git a/l10n_ru_contract_sale/models/sale_make_invoice_advance.py b/l10n_ru_contract_sale/models/sale_make_invoice_advance.py new file mode 100644 index 00000000..5fb593e8 --- /dev/null +++ b/l10n_ru_contract_sale/models/sale_make_invoice_advance.py @@ -0,0 +1,11 @@ +from odoo import models + + +class ContractCreateInvoice(models.TransientModel): + _inherit = 'sale.advance.payment.inv' + + def _prepare_invoice_values(self, order, so_lines, accounts): + invoice_vals = super()._prepare_invoice_values(order, so_lines, accounts) + if order.mt_contract_id: + invoice_vals['mt_contract_id'] = order.mt_contract_id.id + return invoice_vals \ No newline at end of file diff --git a/l10n_ru_contract_sale/models/sale_order.py b/l10n_ru_contract_sale/models/sale_order.py new file mode 100644 index 00000000..517d4817 --- /dev/null +++ b/l10n_ru_contract_sale/models/sale_order.py @@ -0,0 +1,57 @@ +from odoo import api, fields, models, exceptions, _ +from datetime import datetime + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + mt_contract_id = fields.Many2one('partner.contract.customer', string=_('Номер договора')) + sec_partner_id = fields.Many2one('res.partner', string=_('Контрагент'), store=True, compute='_compute_get_pid') + stamp = fields.Boolean(string=_('Печать и подпись'), related='mt_contract_id.stamp') + + @api.depends('partner_id') + def _compute_get_pid(self): + for s in self: + s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id + + @api.onchange('mt_contract_id') + def set_ons(self): + for s in self: + if s.mt_contract_id: + s.payment_term_id = s.mt_contract_id.payment_term_id + + @api.constrains('state') + def late_payment_check(self): + for s in self: + if s.mt_contract_id: + if s.state == 'sale': + late_invoices_count = 0 + max_receivable = s.mt_contract_id.profile_id.max_receivable_id + + invoices_obj = self.env['account.move'].search([('partner_id', '=', s.partner_id.id), + ('state', '=', 'posted'), + ('payment_state', 'not in', ['paid', 'reversed']), + ('move_type', 'in', ['out_invoice']), + ('invoice_date_due', '<', datetime.now().date())]) + + for invoice in invoices_obj: + late_invoices_count += invoice.amount_residual + + if late_invoices_count > max_receivable: + raise exceptions.ValidationError( + f'Нельзя подтвердить заказ, так как у контрагента {s.sec_partner_id.name} нарушено ' + f'условие по дебиторской задолженности.\n\n' + f'Контрагент {s.sec_partner_id.name} должен {late_invoices_count}руб.\n' + f'Максимальная дебиторская задолженность указанная в ' + f'договоре №{s.mt_contract_id.name} - {max_receivable}руб.\n\n' + f'Проверьте следующие неоплаченные счета контрагента:\n' + f'{", ".join([invoice.name for invoice in invoices_obj])}') + + + def _prepare_invoice(self): + invoice_vals = super(SaleOrder, self)._prepare_invoice() + for s in self: + if s.mt_contract_id: + invoice_vals['mt_contract_id'] = s.mt_contract_id.id + invoice_vals['osnovanie'] = 'Договор № ' + s.mt_contract_id.name + ' от ' + fields.Datetime.from_string( + s.mt_contract_id.date_start).strftime("%d.%m.%Y") + return invoice_vals \ No newline at end of file diff --git a/l10n_ru_contract_sale/report/__init__.py b/l10n_ru_contract_sale/report/__init__.py new file mode 100644 index 00000000..c204bf79 --- /dev/null +++ b/l10n_ru_contract_sale/report/__init__.py @@ -0,0 +1,2 @@ +from . import report_contract_order + diff --git a/l10n_ru_contract_sale/report/report_contract_order.py b/l10n_ru_contract_sale/report/report_contract_order.py new file mode 100644 index 00000000..42a679de --- /dev/null +++ b/l10n_ru_contract_sale/report/report_contract_order.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from odoo import api, models + + +class ContractCustomerReportOrder(models.AbstractModel): + _name = 'contract.customer.report_order' + + + def get_report_values(self, docids, data=None): + docs = self.env['sale.order'].browse(docids) + return { + 'doc_ids': docs.ids, + 'doc_model': 'sale.order', + 'docs': docs, + } + + + diff --git a/l10n_ru_contract_sale/report/report_contract_order.xml b/l10n_ru_contract_sale/report/report_contract_order.xml new file mode 100644 index 00000000..df23d59a --- /dev/null +++ b/l10n_ru_contract_sale/report/report_contract_order.xml @@ -0,0 +1,594 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Договор со спецификацией + sale.order + qweb-pdf + l10n_ru_contract_sale.report_contract_customer_order + l10n_ru_contract_sale.report_contract_customer_order + 'Договор со спецификацией - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract_sale/report/report_contract_order1.xml b/l10n_ru_contract_sale/report/report_contract_order1.xml new file mode 100644 index 00000000..4bee4dab --- /dev/null +++ b/l10n_ru_contract_sale/report/report_contract_order1.xml @@ -0,0 +1,406 @@ + + + + + + A4 + + A4 + 0 + 0 + Portrait + 15 + 30 + 7 + 7 + + 10 + 90 + + + + Спецификация + sale.order + qweb-pdf + l10n_ru_contract_sale.report_contract_customer_order1 + l10n_ru_contract_sale.report_contract_customer_order1 + 'Спецификация - %s' % (object.name) + + + report + + diff --git a/l10n_ru_contract_sale/tests/__init__.py b/l10n_ru_contract_sale/tests/__init__.py new file mode 100644 index 00000000..ea35715b --- /dev/null +++ b/l10n_ru_contract_sale/tests/__init__.py @@ -0,0 +1 @@ +from . import test_contract_sale diff --git a/l10n_ru_contract_sale/tests/test_contract_sale.py b/l10n_ru_contract_sale/tests/test_contract_sale.py new file mode 100644 index 00000000..ba3b1128 --- /dev/null +++ b/l10n_ru_contract_sale/tests/test_contract_sale.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_contract_sale — overdue debt check on sale order confirmation +and invoice preparation with contract fields. + +Validates: Requirements 16.1, 16.2, 16.3 +""" +from datetime import date, timedelta + +from odoo.tests.common import TransactionCase +from odoo.exceptions import ValidationError + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_or_create_accounts(env): + """Return a receivable and income account for the current company.""" + receivable = env['account.account'].search([ + ('account_type', '=', 'asset_receivable'), + ('company_ids', 'in', env.company.id), + ], limit=1) + payable = env['account.account'].search([ + ('account_type', '=', 'liability_payable'), + ('company_ids', 'in', env.company.id), + ], limit=1) + income = env['account.account'].search([ + ('account_type', '=', 'income'), + ('company_ids', 'in', env.company.id), + ], limit=1) + return receivable, payable, income + + +def _get_or_create_journal(env): + """Return or create a sales journal.""" + journal = env['account.journal'].search([ + ('type', '=', 'sale'), + ('company_id', '=', env.company.id), + ], limit=1) + if not journal: + journal = env['account.journal'].create({ + 'name': 'Test Sales Journal CS', + 'type': 'sale', + 'code': 'TSCS', + 'company_id': env.company.id, + }) + return journal + + +def _get_or_create_payment_term(env): + """Return or create a payment term.""" + term = env['account.payment.term'].search([], limit=1) + if not term: + term = env['account.payment.term'].create({'name': 'Immediate CS'}) + return term + + +def _make_profile(env, journal, payment_term, receivable, payable, max_receivable=10000.0): + """Create a contract.profile.""" + return env['contract.profile'].create({ + 'name': 'Test Profile CS', + 'journal_id': journal.id, + 'payment_term_id': payment_term.id, + 'receivable_account_id': receivable.id, + 'payable_account_id': payable.id, + 'max_receivable_id': max_receivable, + }) + + +def _make_partner(env): + """Create a company partner.""" + return env['res.partner'].create({ + 'name': 'Test Partner CS', + 'is_company': True, + }) + + +def _make_contract(env, partner, profile): + """Create a minimal partner.contract.customer.""" + return env['partner.contract.customer'].create({ + 'date_start': '2024-01-01', + 'date_end': '2024-12-31', + 'type': 'customer', + 'profile_id': profile.id, + 'partner_id': partner.id, + 'partner_type': 'company', + 'company_id': env.company.id, + }) + + +def _make_product(env): + """Return or create a storable product.""" + product = env['product.product'].search([ + ('type', '=', 'service'), + ], limit=1) + if not product: + product = env['product.product'].create({ + 'name': 'Test Product CS', + 'type': 'service', + }) + return product + + +def _make_sale_order(env, partner, contract, product): + """Create a confirmed-ready sale order linked to a contract.""" + order = env['sale.order'].create({ + 'partner_id': partner.id, + 'mt_contract_id': contract.id, + 'order_line': [(0, 0, { + 'product_id': product.id, + 'product_uom_qty': 1.0, + 'price_unit': 500.0, + })], + }) + return order + + +def _make_overdue_invoice(env, partner, journal, income_account, amount, days_overdue=10): + """Create a posted out_invoice that is overdue and unpaid.""" + due_date = date.today() - timedelta(days=days_overdue) + invoice = env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner.id, + 'journal_id': journal.id, + 'invoice_date': due_date, + 'invoice_date_due': due_date, + 'invoice_line_ids': [(0, 0, { + 'name': 'Overdue line', + 'quantity': 1.0, + 'price_unit': amount, + 'account_id': income_account.id, + })], + }) + invoice.action_post() + return invoice + + +# --------------------------------------------------------------------------- +# TestContractSaleOrder +# --------------------------------------------------------------------------- + +class TestContractSaleOrder(TransactionCase): + """ + Tests for sale order confirmation with overdue debt check and + invoice preparation with contract fields. + + Validates: Requirements 16.1, 16.2, 16.3 + """ + + def setUp(self): + super().setUp() + self.receivable, self.payable, self.income = _get_or_create_accounts(self.env) + self.journal = _get_or_create_journal(self.env) + self.payment_term = _get_or_create_payment_term(self.env) + self.partner = _make_partner(self.env) + self.product = _make_product(self.env) + + # ------------------------------------------------------------------ + # Requirement 16.1 — overdue debt > max_receivable raises ValidationError + # ------------------------------------------------------------------ + + def test_confirm_with_overdue_debt_raises(self): + """ + Req 16.1 — confirming a sale order when the partner has overdue debt + exceeding max_receivable raises ValidationError. + """ + profile = _make_profile( + self.env, self.journal, self.payment_term, + self.receivable, self.payable, + max_receivable=100.0, + ) + contract = _make_contract(self.env, self.partner, profile) + + # Create an overdue posted invoice with amount > max_receivable + _make_overdue_invoice( + self.env, self.partner, self.journal, self.income, + amount=500.0, # 500 > 100 (max_receivable) + ) + + order = _make_sale_order(self.env, self.partner, contract, self.product) + + with self.assertRaises(ValidationError): + order.action_confirm() + + # ------------------------------------------------------------------ + # Requirement 16.2 — debt within limit confirms without errors + # ------------------------------------------------------------------ + + def test_confirm_within_debt_limit_ok(self): + """ + Req 16.2 — confirming a sale order when overdue debt is within + max_receivable succeeds without errors. + """ + profile = _make_profile( + self.env, self.journal, self.payment_term, + self.receivable, self.payable, + max_receivable=10000.0, + ) + contract = _make_contract(self.env, self.partner, profile) + + # Create an overdue invoice with amount well below max_receivable + _make_overdue_invoice( + self.env, self.partner, self.journal, self.income, + amount=50.0, # 50 < 10000 (max_receivable) + ) + + order = _make_sale_order(self.env, self.partner, contract, self.product) + + # Should not raise + order.action_confirm() + self.assertEqual(order.state, 'sale', + "Order should be confirmed (state='sale') when debt is within limit") + + # ------------------------------------------------------------------ + # Requirement 16.3 — _prepare_invoice copies mt_contract_id and osnovanie + # ------------------------------------------------------------------ + + def test_prepare_invoice_copies_contract(self): + """ + Req 16.3 — _prepare_invoice transfers mt_contract_id and osnovanie + from the sale order's contract to the invoice values dict. + """ + profile = _make_profile( + self.env, self.journal, self.payment_term, + self.receivable, self.payable, + max_receivable=10000.0, + ) + contract = _make_contract(self.env, self.partner, profile) + order = _make_sale_order(self.env, self.partner, contract, self.product) + order.action_confirm() + + invoice_vals = order._prepare_invoice() + + self.assertEqual( + invoice_vals.get('mt_contract_id'), contract.id, + "_prepare_invoice should copy mt_contract_id from the contract", + ) + self.assertIn( + 'osnovanie', invoice_vals, + "_prepare_invoice should set 'osnovanie' in invoice values", + ) + self.assertTrue( + invoice_vals['osnovanie'], + "'osnovanie' should be a non-empty string", + ) + self.assertIn( + contract.name, invoice_vals['osnovanie'], + "'osnovanie' should contain the contract name", + ) diff --git a/l10n_ru_contract_sale/views/contract_customer_account_views.xml b/l10n_ru_contract_sale/views/contract_customer_account_views.xml new file mode 100644 index 00000000..d83bea07 --- /dev/null +++ b/l10n_ru_contract_sale/views/contract_customer_account_views.xml @@ -0,0 +1,49 @@ + + + + partner.contract.customer.form.sale + partner.contract.customer + + + + + + + + + + + + + + + + + + + + Договоры + ir.actions.act_window + partner.contract.customer + kanban,list,form + [('type', '=', 'customer')] + + +

+ Нет созданных контрактов +

+

+

+
+
+ + + + + + + +
diff --git a/l10n_ru_contract_sale/views/sale_order_views.xml b/l10n_ru_contract_sale/views/sale_order_views.xml new file mode 100644 index 00000000..a0c2c29e --- /dev/null +++ b/l10n_ru_contract_sale/views/sale_order_views.xml @@ -0,0 +1,15 @@ + + + view_saleorder_form + sale.order + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract_templates/__init__.py b/l10n_ru_contract_templates/__init__.py new file mode 100644 index 00000000..9a7e03ed --- /dev/null +++ b/l10n_ru_contract_templates/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/l10n_ru_contract_templates/__manifest__.py b/l10n_ru_contract_templates/__manifest__.py new file mode 100644 index 00000000..124f0b17 --- /dev/null +++ b/l10n_ru_contract_templates/__manifest__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +{ + "name": "Russian Contracts – DOCX Templates", + "summary": "Связка договоров и DOCX-шаблонов для l10n_ru_contract", + "version": "19.0.1.0.0", + "category": "Accounting", + "author": "MK.Lab", + "depends": [ + "web", + "l10n_ru_contract", + "docx_report", + ], + "data": [ + "views/partner_contract_customer_views.xml", + "views/contract_profile_views.xml", + ], + "installable": True, +} diff --git a/l10n_ru_contract_templates/models/__init__.py b/l10n_ru_contract_templates/models/__init__.py new file mode 100644 index 00000000..b58a25f0 --- /dev/null +++ b/l10n_ru_contract_templates/models/__init__.py @@ -0,0 +1,2 @@ +from . import partner_contract_customer +from . import contract_profile diff --git a/l10n_ru_contract_templates/models/contract_profile.py b/l10n_ru_contract_templates/models/contract_profile.py new file mode 100644 index 00000000..a13c7f48 --- /dev/null +++ b/l10n_ru_contract_templates/models/contract_profile.py @@ -0,0 +1,6 @@ +from odoo import models + + +class ContractProfile(models.Model): + _name = 'contract.profile' + _inherit = ["contract.profile", "docx.template.mixin"] diff --git a/l10n_ru_contract_templates/models/partner_contract_customer.py b/l10n_ru_contract_templates/models/partner_contract_customer.py new file mode 100644 index 00000000..d3b418be --- /dev/null +++ b/l10n_ru_contract_templates/models/partner_contract_customer.py @@ -0,0 +1,12 @@ +from odoo import api, models + + +class PartnerContractCustomer(models.Model): + _name = "partner.contract.customer" + _inherit = ["partner.contract.customer", "docx.template.mixin"] + + @api.onchange("profile_id") + def _onchange_profile_id_set_docx_template(self): + for rec in self: + if rec.profile_id and not rec.docx_template_id and rec.profile_id.docx_template_id: + rec.docx_template_id = rec.profile_id.docx_template_id diff --git a/l10n_ru_contract_templates/views/contract_profile_views.xml b/l10n_ru_contract_templates/views/contract_profile_views.xml new file mode 100644 index 00000000..b78bdd2b --- /dev/null +++ b/l10n_ru_contract_templates/views/contract_profile_views.xml @@ -0,0 +1,18 @@ + + + contract.profile.form.docx.template + contract.profile + + + + + + + + + + + + + + \ No newline at end of file diff --git a/l10n_ru_contract_templates/views/partner_contract_customer_views.xml b/l10n_ru_contract_templates/views/partner_contract_customer_views.xml new file mode 100644 index 00000000..7839d7f1 --- /dev/null +++ b/l10n_ru_contract_templates/views/partner_contract_customer_views.xml @@ -0,0 +1,16 @@ + + + contract.customer.form.docx.template + partner.contract.customer + + + + + + + + + + + + diff --git a/l10n_ru_doc/README.md b/l10n_ru_doc/README.md new file mode 100644 index 00000000..adc684e7 --- /dev/null +++ b/l10n_ru_doc/README.md @@ -0,0 +1,38 @@ +# Российская локализация - Документы +name: l10n_ru_doc + +## Описание +Модуль для печати документов в соответствии с законодательством России. + +## Возможности: +* Товарная накладная (ТОРГ-12) +* Счет на оплату (по форме 1С) +* Счет-фактура +* Акт выполненных работ +* Универсальный передаточный документ + +### Товарная накладная (ТОРГ-12) +#### Для печати: +1. Меню Бухгалтерия - Клиенты - Счета (account.move); +2. Отчет "Товарная накладная (ТОРГ-12)". + +### Счет на оплату (по форме 1С) +1. Меню Продажи - Заказ продаж (sale.order)); +2. Отчет "Счет по форме 1С". + +### Счет-фактура +1. Меню Бухгалтерия - Клиенты - Счета (account.move); +2. Отчет "Счет-фактура". + +### Акт выполненных работ +1. Меню Бухгалтерия - Клиенты - Счета (account.move); +2. Отчет "Акт выполненных работ". + +### Универсальный передаточный документ +1. Меню Бухгалтерия - Клиенты - Счета (account.move); +2. В двух вариантах:отчет "Универсальный передаточный документ(УПД)" + + 2.1. Отчет "Универсальный передаточный документ(УПД)"; + + 2.2. Отчет "УПД без печатей"; + diff --git a/l10n_ru_doc/__init__.py b/l10n_ru_doc/__init__.py new file mode 100644 index 00000000..10a94a5b --- /dev/null +++ b/l10n_ru_doc/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import report_helper +from . import report diff --git a/l10n_ru_doc/__manifest__.py b/l10n_ru_doc/__manifest__.py new file mode 100644 index 00000000..27d73ccf --- /dev/null +++ b/l10n_ru_doc/__manifest__.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Российская локализация - Документы", + + 'summary': "Первичные документы", + + 'description': """ +Модуль для печати документов в соответствии с законодательством России. +============================================================ +Возможности: + * Товарная накладная (ТОРГ-12) + * Счет на оплату (по форме 1С) + * Счет-фактура + * Акт выполненных работ + * Универсальный передаточный документ + +Для печати: + Товарная накладная (ТОРГ-12) + 1. Меню Бухгалтерия - Клиенты - Счета (account.move); + 2. Отчет "Товарная накладная (ТОРГ-12)". + + Счет на оплату (по форме 1С) + 1. Меню Продажи - Заказ продаж (sale.order)); + 2. Отчет "Счет по форме 1С". + + Счет-фактура + 1. Меню Бухгалтерия - Клиенты - Счета (account.move); + 2. Отчет "Счет-фактура". + + Акт выполненных работ + 1. Меню Бухгалтерия - Клиенты - Счета (account.move); + 2. Отчет "Акт выполненных работ". + + Универсальный передаточный документ + 1. Меню Бухгалтерия - Клиенты - Счета (account.move); + 2. В двух вариантах:отчет "Универсальный передаточный документ(УПД)" + 2.1. Отчет "Универсальный передаточный документ(УПД)"; + 2.2. Отчет "УПД без печатей"; + + """, + + 'author': "CodeUP and MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'license': 'AGPL-3', + 'category': 'Localization', + 'version': '19.0.2025.11.11', + + 'depends': ['base', 'sale', 'account', 'sale_stock', 'uom', 'l10n_ru_base', 'docx_report_generation'], + + 'external_dependencies': {'python': ['pytils']}, + + 'data': [ + 'views/account_invoice_view.xml', + 'views/res_partner_view.xml', + 'views/res_company_view.xml', + 'views/res_users_view.xml', + 'views/res_bank_view.xml', + 'views/uom.xml', + 'views/tax.xml', + 'views/product.xml', + 'views/l10n_ru_doc_data.xml', + 'report/l10n_ru_doc_report.xml', + 'report/report_order.xml', + 'report/report_invoice.xml', + 'report/report_bill.xml', + 'report/report_act.xml', + 'report/report_upd.xml', + 'report/report_updn.xml', + ], + + 'demo': [ + 'demo/l10n_ru_doc_demo.xml', + 'demo/l10n_ru_doc_demo_extra.xml', + ], +} diff --git a/l10n_ru_doc/demo/l10n_ru_doc_demo.xml b/l10n_ru_doc/demo/l10n_ru_doc_demo.xml new file mode 100644 index 00000000..8a94dc94 --- /dev/null +++ b/l10n_ru_doc/demo/l10n_ru_doc_demo.xml @@ -0,0 +1,63 @@ + + + + + + ОАО "СБЕРБАНК РОССИИ" + г.Москва + 044525225 + 30101810400000000225 + + + + 40707810600025341231 + + + + + + + iVBORw0KGgoAAAANSUhEUgAAALQAAABACAYAAACzzl09AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxMGE3N2JhNy01MThlLTMwNGEtODcxOC0wMmQ5MWYzYTdiNTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQ2QTI3QjdCQ0JCMTFFMzgwRTQ4NjcwRjlEM0QyMTAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQ2QTI3QjZCQ0JCMTFFMzgwRTQ4NjcwRjlEM0QyMTAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkYzOTcwMjU2QkNCOTExRTM5OEZFRDU5OUQxQUU3MUUzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkYzOTcwMjU3QkNCOTExRTM5OEZFRDU5OUQxQUU3MUUzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+LLXcsQAAAjFJREFUeNrs3TFKM0EUB3BXv+QAgqViYWflBQLbWNhZKwE7QQSPkCMIItgJQW+gtjmCBxLZr34zsMPDiCK/X6c7swPxz/B4zJhuGIYN+Cs2fQQINAg0fL9/5S+6o6NUUT28v3dh/s1NnP/5OT7/7i7Ov7qK83d24vjFoht7X/f4GOfv78f5fd/5s9uhQaBBoGGdNXSzRs7W2GWNfH09On+4v4/jF4vcehcXcf5qpdFuhwaBBoEGgQaBRqBBoOHnNPvQ2b7zxtZWnF+e7SieV+uVZzkOD0efV33r8ixH38f5RV/a2Q47NAg0CDQkde4UYocGgQaBhpT6TuF8Hovq7e3w43B7O36nr+9z55dXq9hHXi7j/N3dOL7RN+6Oj8fXn07j+15e9KHt0CDQINDwpRp6WC5TdwDTNXKjxh7m8zB+mr0TOJnE972+xvVPTzXe7dAg0CDQsNYa+rf58DfCDo1Ag0DDL6+hu7Oz2Kc9OIjPi7MeZd+6/H/Q3WyW6vtWZzlms/j86Smuf34e1/+IVXd1tqM4y4EdGgQaBBqS3CnEDg0CDQINOXUf+u0tdyfw5CSeN354iPP39kbHV+snz19X3+FS9tHLO5HFeOzQINAg0PDVGrpZIzdq7OHyMjU+XSO3vufw+XmtdyKxQ4NAg0BDq4aeNCZMfGbYoUGgQaBRQ4+aJvvI1VmO8k5g8bzsW1fvS/aRm3cii/c522GHBoEGgYYkdwqxQ4NAg0BDzn8BBgBlrqW6k1gn5wAAAABJRU5ErkJggg== + codup-test@mail.ru + www.codup.com + 0000000000 + 000000000 + 00000000 + + + + ООО "CodUP" + ул.Земляничная + дом № 13 + 123456 + г.Москва + + + + 1 + 1 + iVBORw0KGgoAAAANSUhEUgAAAOYAAADmCAMAAAD2tAmJAAAC2VBMVEUWAGH///8WAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGEWAGF7Mdv3AAAA83RSTlMAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0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 + + + + Иванов Иван Петрович + codup-test@mail.ru + + + + Иванов Иван Петрович + iVBORw0KGgoAAAANSUhEUgAAAZQAAAETCAMAAAAmrgDyAAAC61BMVEUOF9r///8OF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9oOF9r/ATCgAAAA+HRSTlMAAAECAwQFBgcICQoLDA0ODxAREhQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJj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 + + + + Сидоров Семен Иванович + codup-test@mail.ru + + + + Сидоров Семен Иванович + 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 + + + + diff --git a/l10n_ru_doc/demo/l10n_ru_doc_demo_extra.xml b/l10n_ru_doc/demo/l10n_ru_doc_demo_extra.xml new file mode 100644 index 00000000..e9bfe08a --- /dev/null +++ b/l10n_ru_doc/demo/l10n_ru_doc_demo_extra.xml @@ -0,0 +1,60 @@ + + + + + + + + 101000 + + + + + 190000 + + + + + Иванов Иван Иванович + + contact + + + 101000 + 4510 123456 + + + + + Товар + TOV-001 + 4607001234567 + 8471300000 + 15000.0 + 9000.0 + + consu + + + + + out_invoice + + + 2026-02-10 + + + 547 + Договор поставки + + + + + + 3.0 + 15000.0 + Товар + + + + diff --git a/l10n_ru_doc/i18n/ru.po b/l10n_ru_doc/i18n/ru.po new file mode 100644 index 00000000..59d03de4 --- /dev/null +++ b/l10n_ru_doc/i18n/ru.po @@ -0,0 +1,116 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ru_doc +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-19 09:27+0000\n" +"PO-Revision-Date: 2020-08-19 09:27+0000\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: l10n_ru_doc +#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_act +msgid "Act" +msgstr "Акт об оказании услуг" + +#. module: l10n_ru_doc +#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_bill +msgid "Bill" +msgstr "Товарная накладная (ТОРГ-12)" + +#. module: l10n_ru_doc +#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_facsimile +#: model:ir.model.fields,help:l10n_ru_doc.field_res_users__print_facsimile +msgid "Check this for adding Facsimiles of responsible persons to documents." +msgstr "Отметьте, для вставки подписей ответственных лиц в документы." + +#. module: l10n_ru_doc +#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_stamp +msgid "Check this for adding Stamp of company to documents." +msgstr "Отметьте, для вставки печати организации в документы." + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__chief_id +msgid "Chief" +msgstr "Руководитель организации" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_account_setup_bank_manual_config__bank_corr_acc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_bank__corr_acc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner_bank__bank_corr_acc +msgid "Corresponding account" +msgstr "Корр. счет" + +#. module: l10n_ru_doc +#: model_terms:ir.ui.view,arch_db:l10n_ru_doc.view_company_ru_form +msgid "Documents" +msgstr "Документы" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__facsimile +msgid "Facsimile" +msgstr "Подпись" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__inn +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__inn +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__inn +msgid "INN" +msgstr "ИНН" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__kpp +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__kpp +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__kpp +msgid "KPP" +msgstr "КПП" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__okpo +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__okpo +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__okpo +msgid "OKPO" +msgstr "ОКПО" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_anywhere +msgid "Print Anywhere" +msgstr "Документы" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_facsimile +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__print_facsimile +msgid "Print Facsimile" +msgstr "Выводить подписи" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_stamp +msgid "Print Stamp" +msgstr "Выводить печать" + +#. module: l10n_ru_doc +#: model_terms:ir.ui.view,arch_db:l10n_ru_doc.view_company_ru_form +msgid "Responsible Persons" +msgstr "Ответственные лица" + +#. module: l10n_ru_doc +#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__stamp +msgid "Stamp" +msgstr "Печать" + +#. module: l10n_ru_doc +#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_anywhere +msgid "Uncheck this, if you want add Facsimile and Stamp only in email." +msgstr "Снимите отметку, если хотите добавлять подписи и печать только в email." + +#. module: l10n_ru_doc +#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_upd +msgid "Upd" +msgstr "Универсальный платежный документ (УПД)" diff --git a/l10n_ru_doc/models/__init__.py b/l10n_ru_doc/models/__init__.py new file mode 100644 index 00000000..d3785302 --- /dev/null +++ b/l10n_ru_doc/models/__init__.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from . import res_partner +from . import res_company +from . import res_users +from . import res_bank +from . import account_invoice +from . import account_move_line +from . import sale +from . import uom +from . import tax +from . import product diff --git a/l10n_ru_doc/models/account_invoice.py b/l10n_ru_doc/models/account_invoice.py new file mode 100644 index 00000000..7ecade04 --- /dev/null +++ b/l10n_ru_doc/models/account_invoice.py @@ -0,0 +1,150 @@ +from datetime import datetime +from odoo import api, fields, models + +class AccountInvoice(models.Model): + _inherit = 'account.move' + kladov=fields.Many2one('res.users', string='Ответственный за передачу товаров/услуг') + gruzopol=fields.Many2one('res.partner', string='Грузополучатель') + gruzootpr=fields.Many2one('res.partner', string='Грузоотправитель') + transport=fields.Char('Данные о транспортировке и грузе') + osnovanie=fields.Char('Основание') + payment_text=fields.Char('Текст для платежек в УПД', compute='_compute_get_txtpayment') + payment_num=fields.Char('Номер платежки в УПД', compute='_compute_get_txtpayment') + payment_date = fields.Char('Дата платежки в УПД', compute='_compute_get_txtpayment') + only_service = fields.Boolean('Только услуги', compute='_compute_get_check_service') + + @api.depends('invoice_line_ids') + def _compute_get_check_service(self): + for s in self: + s.only_service = all((line.product_id.type=='service') for line in s.invoice_line_ids) + + def _compute_get_txtpayment(self): + for s in self: + payments = s._get_reconciled_payments() + payment_text = '' + + for payment in payments: + if payment.date: + payment_text += payment.name + ' от ' + \ + fields.Datetime.from_string(payment.date).strftime("%d.%m.%Y") + if payments[-1]!=payment: + payment_text += ', ' + if payments: + s.payment_num = payments[0].name + s.payment_date = fields.Datetime.from_string(payments[0].date).strftime("%d.%m.%Y") + else: + s.payment_num = '' + s.payment_text = '' + s.payment_date = '' + + s.payment_text = payment_text + + # def action_bill_sent(self): + # assert len(self) == 1, 'This option should only be used for a single id at a time.' + # template = self.env.ref('account.email_template_edi_invoice', False) + # compose_form = self.env.ref('mail.email_compose_message_wizard_form', False) + # ctx = { + # 'default_model': 'account.move', + # 'default_res_id': self.id, + # 'default_use_template': bool(template), + # 'default_template_id': template.id, + # 'default_composition_mode': 'comment', + # 'mark_invoice_as_sent': True, + # } + # return { + # 'name': 'Compose Email', + # 'type': 'ir.actions.act_window', + # 'view_type': 'form', + # 'view_mode': 'form', + # 'res_model': 'mail.compose.message', + # 'views': [(compose_form.id, 'form')], + # 'view_id': compose_form.id, + # 'target': 'new', + # 'context': ctx, + # } + + def bill_print(self): + assert len(self) == 1, 'This option should only be used for a single id at a time.' + return self.env['report'].get_action(self, 'l10n_ru_doc.report_upd') + + def get_delivery_doc_name(self): + for s in self: + if s: + pickings = [] + pickings_list = '0' + orders = self.env['sale.order'].sudo().search([('name','=',s.invoice_origin)]) if s.invoice_origin else [] + for o in orders: + if o.picking_ids: + for p in o.picking_ids: + pickings.append(p.name) + if len(pickings)>0: + pickings_list = ';'.join(pickings) + if pickings_list != '0': + return pickings_list + if s.name and s.name.find('/') > -1: + return 'УПД № ' + s.name[len(s.name) - 4:] + return 'УПД № ' + str(s.name) if s.name else '' + + + def get_delivery_doc_date(self): + for s in self: + if s: + delivery_dates = [] + pickings = [] + orders = self.env['sale.order'].sudo().search([('name', '=', s.invoice_origin)]) + for o in orders: + if o.picking_ids: + for p in o.picking_ids: + if p.date_done: + formatted_date = datetime.strftime(p.date, '%d.%m.%Y') + pickings.append(formatted_date) + if pickings and len(pickings)>0: + delivery_dates.append(';'.join(pickings)) + else: + if s.date: + delivery_dates.append(datetime.strftime(s.date, '%d.%m.%Y')) + return delivery_dates + + def get_function_partner(self, partner=False, type='director'): + if partner: + if partner.parent_id: + partner = partner.parent_id + director = self.env['res.partner'].search([('parent_id', '=', partner.id), + ('type', '=', type)], limit=1) + if director: + if director.function: + return director.function + return '' + + def get_name_partner(self, partner=False, type='director'): + if partner: + if partner.parent_id: + partner = partner.parent_id + director = self.env['res.partner'].search([('parent_id', '=', partner.id), + ('type', '=', type)], limit=1) + if director: + if director.name: + return director.name + return '' + + def get_facsimile_partner(self, partner=False, type='director'): + if partner: + if partner.parent_id: + partner = partner.parent_id + director = self.env['res.partner'].search([('parent_id', '=', partner.id), + ('type', '=', type)], + limit=1) + if director: + if director.facsimile: + return director.facsimile + return '' + + def get_stamp_partner(self, partner=False): + if partner: + if partner.parent_id: + partner = partner.parent_id + if partner.stamp: + return partner.stamp + return False + + diff --git a/l10n_ru_doc/models/account_move_line.py b/l10n_ru_doc/models/account_move_line.py new file mode 100644 index 00000000..06e0f5ec --- /dev/null +++ b/l10n_ru_doc/models/account_move_line.py @@ -0,0 +1,29 @@ +from datetime import datetime +from odoo import api, fields, models + +class AccountMoveLine(models.Model): + _inherit = 'account.move.line' + + price_total_pf = fields.Monetary( + string='TotalPF', + compute='_compute_totals', + currency_field='currency_id', + ) + + @api.depends('quantity', 'discount', 'price_unit', 'tax_ids', 'currency_id') + def _compute_totals(self): + super(AccountMoveLine,self)._compute_totals() + for line in self: + line_discount_price_unit = line.price_unit * (1 - (line.discount / 100.0)) + if line.tax_ids.filtered(lambda tax: tax.invisiblePF == False): + taxes_res = line.tax_ids.filtered(lambda tax: tax.invisiblePF == False).compute_all( + line_discount_price_unit, + quantity=line.quantity, + currency=line.currency_id, + product=line.product_id, + partner=line.partner_id, + is_refund=line.is_refund, + ) + line.price_total_pf = taxes_res['total_included'] + else: + line.price_total_pf = line.price_total \ No newline at end of file diff --git a/l10n_ru_doc/models/product.py b/l10n_ru_doc/models/product.py new file mode 100644 index 00000000..c230841c --- /dev/null +++ b/l10n_ru_doc/models/product.py @@ -0,0 +1,5 @@ +from odoo import fields, models + +class ProductTnved(models.Model): + _inherit = 'product.product' + kod_tnved = fields.Char('Код ТНВЭД') diff --git a/l10n_ru_doc/models/res_bank.py b/l10n_ru_doc/models/res_bank.py new file mode 100644 index 00000000..f22d4308 --- /dev/null +++ b/l10n_ru_doc/models/res_bank.py @@ -0,0 +1,19 @@ +from odoo import api, fields, models + +class Bank(models.Model): + _inherit = 'res.bank' + + corr_acc = fields.Char('Corresponding account', size=64) + + +class ResPartnerBank(models.Model): + _inherit = 'res.partner.bank' + + bank_corr_acc = fields.Char('Corresponding account', size=64) + + @api.onchange('bank_id') + def onchange_bank_id(self): + for s in self: + s.bank_name = s.bank_id.name + s.bank_bic = s.bank_id.bic + s.bank_corr_acc = s.bank_id.corr_acc diff --git a/l10n_ru_doc/models/res_company.py b/l10n_ru_doc/models/res_company.py new file mode 100644 index 00000000..9ca4ae72 --- /dev/null +++ b/l10n_ru_doc/models/res_company.py @@ -0,0 +1,18 @@ +from odoo import fields, models + +class Company(models.Model): + _inherit = 'res.company' + + inn = fields.Char(related='partner_id.inn', readonly=False) + kpp = fields.Char(related='partner_id.kpp', readonly=False) + okpo = fields.Char(related='partner_id.okpo', readonly=False) + chief_id = fields.Many2one('res.users', 'Chief') + accountant_id = fields.Many2one('res.users', 'General Accountant') + print_facsimile = fields.Boolean(string='Print Facsimile', + help="Check this for adding Facsimiles of responsible persons to documents.") + print_stamp = fields.Boolean(string='Print Stamp', + help="Check this for adding Stamp of company to documents.") + stamp = fields.Binary("Stamp") + print_anywhere = fields.Boolean(string='Print Anywhere', + help="Uncheck this, if you want add Facsimile and Stamp only in email.", + default=True) diff --git a/l10n_ru_doc/models/res_partner.py b/l10n_ru_doc/models/res_partner.py new file mode 100644 index 00000000..e918a392 --- /dev/null +++ b/l10n_ru_doc/models/res_partner.py @@ -0,0 +1,11 @@ +from odoo import fields, models +class ResPartner(models.Model): + _inherit = 'res.partner' + + inn = fields.Char('INN', related='vat') + kpp = fields.Char('KPP', size=9) + okpo = fields.Char('OKPO', size=14) + ogrn = fields.Char('ОГРН') + type = fields.Selection(selection_add=[('director', 'Директор'), ('accountant', 'Бухгалтер')]) + facsimile = fields.Binary("Подпись") + stamp = fields.Binary("Печать") diff --git a/l10n_ru_doc/models/res_users.py b/l10n_ru_doc/models/res_users.py new file mode 100644 index 00000000..aaf70cba --- /dev/null +++ b/l10n_ru_doc/models/res_users.py @@ -0,0 +1,7 @@ +from odoo import fields, models + +class Users(models.Model): + _inherit = 'res.users' + + print_facsimile = fields.Boolean(related='company_id.print_facsimile') + facsimile = fields.Binary() diff --git a/l10n_ru_doc/models/sale.py b/l10n_ru_doc/models/sale.py new file mode 100644 index 00000000..83008e74 --- /dev/null +++ b/l10n_ru_doc/models/sale.py @@ -0,0 +1,73 @@ +from odoo import models, fields, api +from datetime import datetime +import re +from pytils import numeral, dt +from odoo.tools import pycompat + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + amount_total_words = fields.Char( + string='Сумма прописью', + compute='_compute_amount_total_words', + store=True + ) + + chief_initials = fields.Char( + string='Инициалы руководителя', + compute='_compute_chief_initials', + store=True + ) + + accountant_initials = fields.Char( + string='Инициалы бухгалтера', + compute='_compute_accountant_initials', + store=True + ) + + @api.depends('company_id.chief_id.name') + def _compute_chief_initials(self): + for order in self: + if order.company_id and order.company_id.chief_id: + order.chief_initials = self._get_initials(order.company_id.chief_id.name) + else: + order.chief_initials = '' + + @api.depends('company_id.accountant_id.name') + def _compute_accountant_initials(self): + for order in self: + if order.company_id and order.company_id.accountant_id: + order.accountant_initials = self._get_initials(order.company_id.accountant_id.name) + else: + order.accountant_initials = '' + + def _get_initials(self, fio): + if fio: + # fio.split()[0] + # [fio[0:1]+'.' for fio in fio.split()[1:]] + return (fio.split()[0] + ' ' + ''.join([part[0:1] + '.' for part in fio.split()[1:]])).strip() + return '' + + @api.depends('amount_total') + def _compute_amount_total_words(self): + for order in self: + if order.amount_total: + order.amount_total_words = self.rubles(order.amount_total) + else: + order.amount_total_words = '' + + def rubles(self, sum_amount): + rub = int(sum_amount) + kop = int(round((sum_amount - rub) * 100)) + + text_rubles = numeral.rubles(rub) + text_copeck = numeral.choose_plural(kop, ("копейка", "копейки", "копеек")) + text_rubles = text_rubles[0].upper() + text_rubles[1:] + + return ("%s %02d %s") % (text_rubles, kop, text_copeck) + + def print_quotation(self): + self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'}) + return self.env['report'].get_action(self, 'l10n_ru_doc.report_order') + diff --git a/l10n_ru_doc/models/tax.py b/l10n_ru_doc/models/tax.py new file mode 100644 index 00000000..081adb1b --- /dev/null +++ b/l10n_ru_doc/models/tax.py @@ -0,0 +1,6 @@ +from odoo import fields, models + +class TaxInherit(models.Model): + _inherit = 'account.tax' + + invisiblePF = fields.Boolean('Не видно в ПФ') diff --git a/l10n_ru_doc/models/uom.py b/l10n_ru_doc/models/uom.py new file mode 100644 index 00000000..1de1e3b7 --- /dev/null +++ b/l10n_ru_doc/models/uom.py @@ -0,0 +1,4 @@ +from odoo import fields, models +class UomInherit(models.Model): + _inherit = 'uom.uom' + kod = fields.Char('Код единицы измерения') diff --git a/l10n_ru_doc/report/__init__.py b/l10n_ru_doc/report/__init__.py new file mode 100644 index 00000000..b058f02e --- /dev/null +++ b/l10n_ru_doc/report/__init__.py @@ -0,0 +1,5 @@ +from . import report_order +from . import report_invoice +from . import report_bill +from . import report_act +from . import report_upd diff --git a/l10n_ru_doc/report/l10n_ru_doc_report.xml b/l10n_ru_doc/report/l10n_ru_doc_report.xml new file mode 100644 index 00000000..fcc29a8e --- /dev/null +++ b/l10n_ru_doc/report/l10n_ru_doc_report.xml @@ -0,0 +1,179 @@ + + + + + A4 + + A4 + 0 + 0 + Portrait + 7 + 7 + 7 + 7 + + 35 + 75 + + + A4 Landscape + + A4 + 0 + 0 + Landscape + 7 + 7 + 7 + 7 + + 75 + 60 + + + + Счет по форме 1С + sale.order + qweb-pdf + l10n_ru_doc.report_order + l10n_ru_doc.report_order + 'Счет - %s ' % ((object.name or '')+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name)) + + + report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Универсальный передаточный документ(УПД) + account.move + qweb-pdf + l10n_ru_doc.report_upd + l10n_ru_doc.report_upd + 'УПД' + + + report + + + + + + + + + + + + + + + + УПД без печатей + account.move + qweb-pdf + l10n_ru_doc.report_updn + l10n_ru_doc.report_updn + 'УПД без печатей' + + + report + + + + + + + + + + + + + + + diff --git a/l10n_ru_doc/report/report_act.py b/l10n_ru_doc/report/report_act.py new file mode 100644 index 00000000..133336e1 --- /dev/null +++ b/l10n_ru_doc/report/report_act.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from odoo import models +from odoo.addons.l10n_ru_doc.report_helper import QWebHelper + +class RuActReport(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_act' + + def _get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs + } diff --git a/l10n_ru_doc/report/report_act.xml b/l10n_ru_doc/report/report_act.xml new file mode 100644 index 00000000..4af4ce3c --- /dev/null +++ b/l10n_ru_doc/report/report_act.xml @@ -0,0 +1,203 @@ + + + + + + diff --git a/l10n_ru_doc/report/report_bill.py b/l10n_ru_doc/report/report_bill.py new file mode 100644 index 00000000..400d3ad2 --- /dev/null +++ b/l10n_ru_doc/report/report_bill.py @@ -0,0 +1,14 @@ +from odoo import models +from odoo.addons.l10n_ru_doc.report_helper import QWebHelper + +class RuBillReport(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_bill' + + def _get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs + } diff --git a/l10n_ru_doc/report/report_bill.xml b/l10n_ru_doc/report/report_bill.xml new file mode 100644 index 00000000..c7f55687 --- /dev/null +++ b/l10n_ru_doc/report/report_bill.xml @@ -0,0 +1,758 @@ + + + + + + diff --git a/l10n_ru_doc/report/report_invoice.py b/l10n_ru_doc/report/report_invoice.py new file mode 100644 index 00000000..a71c09a7 --- /dev/null +++ b/l10n_ru_doc/report/report_invoice.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from odoo import models +from odoo.addons.l10n_ru_doc.report_helper import QWebHelper +class RuInvoiceReport(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_invoice' + def _get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs + } diff --git a/l10n_ru_doc/report/report_invoice.xml b/l10n_ru_doc/report/report_invoice.xml new file mode 100644 index 00000000..78b8b213 --- /dev/null +++ b/l10n_ru_doc/report/report_invoice.xml @@ -0,0 +1,329 @@ + + + + + + diff --git a/l10n_ru_doc/report/report_order.py b/l10n_ru_doc/report/report_order.py new file mode 100644 index 00000000..eb94acae --- /dev/null +++ b/l10n_ru_doc/report/report_order.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from odoo import models +from odoo.addons.l10n_ru_doc.report_helper import QWebHelper +class RuSaleOrderReport(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_order' + def _get_report_values(self, docids, data=None): + docs = self.env['sale.order'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'sale.order', + 'docs': docs + } diff --git a/l10n_ru_doc/report/report_order.xml b/l10n_ru_doc/report/report_order.xml new file mode 100644 index 00000000..e14c07b9 --- /dev/null +++ b/l10n_ru_doc/report/report_order.xml @@ -0,0 +1,336 @@ + + + + + + diff --git a/l10n_ru_doc/report/report_upd.py b/l10n_ru_doc/report/report_upd.py new file mode 100644 index 00000000..1537ba82 --- /dev/null +++ b/l10n_ru_doc/report/report_upd.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from odoo import models +from odoo.addons.l10n_ru_doc.report_helper import QWebHelper + +class RuUpdReport(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_upd' + def _get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs + } +class RuUpdReportn(models.AbstractModel): + _name = 'report.l10n_ru_doc.report_updn' + def _get_report_values(self, docids, data=None): + docs = self.env['account.move'].browse(docids) + return { + 'helper': QWebHelper(), + 'doc_ids': docs.ids, + 'doc_model': 'account.move', + 'docs': docs + } diff --git a/l10n_ru_doc/report/report_upd.xml b/l10n_ru_doc/report/report_upd.xml new file mode 100644 index 00000000..1825c873 --- /dev/null +++ b/l10n_ru_doc/report/report_upd.xml @@ -0,0 +1,1108 @@ + + + + + + diff --git a/l10n_ru_doc/report/report_updn.xml b/l10n_ru_doc/report/report_updn.xml new file mode 100644 index 00000000..b3013c49 --- /dev/null +++ b/l10n_ru_doc/report/report_updn.xml @@ -0,0 +1,1177 @@ + + + + + + diff --git a/l10n_ru_doc/report_helper.py b/l10n_ru_doc/report_helper.py new file mode 100644 index 00000000..f87c4ccd --- /dev/null +++ b/l10n_ru_doc/report_helper.py @@ -0,0 +1,112 @@ +from datetime import datetime +import re +from pytils import numeral, dt +from odoo.tools import pycompat + + +class QWebHelper(object): + + def img(self, img, type='png', width=0, height=0) : + if width : + width = "width='%spx'"%(width) + else : + width = " " + if height : + height = "height='%spx'"%(height) + else : + height = " " + toreturn = ""%( + width, + height, + type, + str(pycompat.to_text(img))) + return toreturn + + def numer(self, name): + if name: + numeration = re.findall(r'\d+$', name) + if numeration: + return numeration[0] + return '' + + def ru_date(self, date): + if date and date != 'False': + return dt.ru_strftime('"%d" %B %Y года', date=datetime.strptime(str(date), + "%Y-%m-%d"), inflected=True) + return '' + + def ru_date2(self, date): + if date and date != 'False': + return dt.ru_strftime('%d %B %Y г.', date=datetime.strptime(str(date), + "%Y-%m-%d %H:%M:%S"), inflected=True) + return '' + + def in_words(self, number): + return numeral.in_words(number) + + def rubles(self, sum): + text_rubles = numeral.rubles(int(sum)) + copeck = round((sum - int(sum))*100) + text_copeck = numeral.choose_plural(int(copeck), ("копейка", "копейки", "копеек")) + return ("%s %02d %s")%(text_rubles, copeck, text_copeck) + + def initials(self, fio): + if fio: + return (fio.split()[0]+' '+''.join([fio[0:1]+'.' for fio in fio.split()[1:]])).strip() + return '' + + def address(self, partner): + repr = [] + if partner.zip: + repr.append(partner.zip) + if partner.country_id: + repr.append(partner.country_id.name) + if partner.state_id: + repr.append(partner.state_id.name) + if partner.city: + repr.append(partner.city) + if partner.street: + repr.append(partner.street) + if partner.street2: + repr.append(partner.street2) + return ', '.join(repr) + + def representation(self, partner): + repr = [] + if partner.name: + repr.append(partner.name) + if partner.inn: + repr.append("ИНН " + partner.inn) + if partner.kpp: + repr.append("КПП " + partner.kpp) + repr.append(self.address(partner)) + return ', '.join(repr) + + def full_representation(self, partner): + repr = [self.representation(partner)] + if partner.phone: + repr.append("тел.: " + partner.phone) + elif partner.parent_id.phone: + repr.append("тел.: " + partner.parent_id.phone) + bank = None + if partner.bank_ids: + bank = partner.bank_ids[0] + elif partner.parent_id.bank_ids: + bank = partner.parent_id.bank_ids[0] + if bank and bank.acc_number: + repr.append("р/сч " + bank.acc_number) + if bank and bank.bank_name: + repr.append("в банке " + bank.bank_name) + if bank and bank.bank_bic: + repr.append("БИК " + bank.bank_bic) + if bank and bank.bank_corr_acc: + repr.append("к/с " + bank.bank_corr_acc) + return ', '.join(repr) + + def representation_small(self, partner): + repr = [] + if partner.name: + repr.append(partner.name) + + repr.append(self.address(partner)) + return ', '.join(repr) diff --git a/l10n_ru_doc/static/description/docs.png b/l10n_ru_doc/static/description/docs.png new file mode 100644 index 00000000..7cc91a81 Binary files /dev/null and b/l10n_ru_doc/static/description/docs.png differ diff --git a/l10n_ru_doc/static/description/icon.png b/l10n_ru_doc/static/description/icon.png new file mode 100644 index 00000000..5b3a94e5 Binary files /dev/null and b/l10n_ru_doc/static/description/icon.png differ diff --git a/l10n_ru_doc/static/description/index.html b/l10n_ru_doc/static/description/index.html new file mode 100644 index 00000000..d4c9e96d --- /dev/null +++ b/l10n_ru_doc/static/description/index.html @@ -0,0 +1,45 @@ +
+
+

Первичные документы РФ

+
+

+Модуль для печати первичных документов в соответствии с законами РФ. +

+

+Возможности: +

    +
  • Товарная накладная (ТОРГ-12)
  • +
  • Счет на оплату
  • +
  • Счет-фактура
  • +
  • Акт выполненных работ
  • +
  • Вывод подписей и печати
  • +
+

+
+
+
+ +
+
+
+
+ +
+
+

Помощь и поддержка

+
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/l10n_ru_doc/static/description/support.png b/l10n_ru_doc/static/description/support.png new file mode 100644 index 00000000..2805ec72 Binary files /dev/null and b/l10n_ru_doc/static/description/support.png differ diff --git a/l10n_ru_doc/static/description/waybill.png b/l10n_ru_doc/static/description/waybill.png new file mode 100644 index 00000000..8bab6182 Binary files /dev/null and b/l10n_ru_doc/static/description/waybill.png differ diff --git a/l10n_ru_doc/static/src/css/l10n_ru_doc.css b/l10n_ru_doc/static/src/css/l10n_ru_doc.css new file mode 100644 index 00000000..d77b69a6 --- /dev/null +++ b/l10n_ru_doc/static/src/css/l10n_ru_doc.css @@ -0,0 +1,7 @@ +@charset "utf-8"; +.openerp .codup_sign > img { + width: 235px; + height: 65px; + max-width: 235px; + max-height: 65px; +} \ No newline at end of file diff --git a/l10n_ru_doc/static/src/docx/report_account_invoice_act_new_templates.docx b/l10n_ru_doc/static/src/docx/report_account_invoice_act_new_templates.docx new file mode 100644 index 00000000..4c34f8c6 Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_account_invoice_act_new_templates.docx differ diff --git a/l10n_ru_doc/static/src/docx/report_account_invoice_bill_new_templates.docx b/l10n_ru_doc/static/src/docx/report_account_invoice_bill_new_templates.docx new file mode 100644 index 00000000..5a873a7b Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_account_invoice_bill_new_templates.docx differ diff --git a/l10n_ru_doc/static/src/docx/report_account_invoice_upd_new_templates.docx b/l10n_ru_doc/static/src/docx/report_account_invoice_upd_new_templates.docx new file mode 100644 index 00000000..e10546c9 Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_account_invoice_upd_new_templates.docx differ diff --git a/l10n_ru_doc/static/src/docx/report_account_invoice_updn_templates.docx b/l10n_ru_doc/static/src/docx/report_account_invoice_updn_templates.docx new file mode 100644 index 00000000..4f57a564 Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_account_invoice_updn_templates.docx differ diff --git a/l10n_ru_doc/static/src/docx/report_account_invoices_new_templates.docx b/l10n_ru_doc/static/src/docx/report_account_invoices_new_templates.docx new file mode 100644 index 00000000..fab65eb4 Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_account_invoices_new_templates.docx differ diff --git a/l10n_ru_doc/static/src/docx/report_saleorder_new_template.docx b/l10n_ru_doc/static/src/docx/report_saleorder_new_template.docx new file mode 100644 index 00000000..7414c772 Binary files /dev/null and b/l10n_ru_doc/static/src/docx/report_saleorder_new_template.docx differ diff --git a/l10n_ru_doc/tests/__init__.py b/l10n_ru_doc/tests/__init__.py new file mode 100644 index 00000000..cc89eaf6 --- /dev/null +++ b/l10n_ru_doc/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_ru_doc diff --git a/l10n_ru_doc/tests/test_ru_doc.py b/l10n_ru_doc/tests/test_ru_doc.py new file mode 100644 index 00000000..6c3c233d --- /dev/null +++ b/l10n_ru_doc/tests/test_ru_doc.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_doc report generation. + +Validates: Requirement 12.1 +""" +from odoo.tests.common import TransactionCase +from odoo.tests import tagged + + +def _make_out_invoice(env): + """Create a minimal out_invoice account.move for report testing.""" + partner = env['res.partner'].search([('is_company', '=', True)], limit=1) + if not partner: + partner = env['res.partner'].create({'name': 'Test Partner RU', 'is_company': True}) + + journal = env['account.journal'].search( + [('type', '=', 'sale'), ('company_id', '=', env.company.id)], limit=1 + ) + if not journal: + journal = env['account.journal'].create({ + 'name': 'Test Sales Journal', + 'type': 'sale', + 'code': 'TSALE', + }) + + move = env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner.id, + 'journal_id': journal.id, + 'invoice_date': '2024-01-15', + }) + return move + + +@tagged('post_install', '-at_install') +class TestRuDoc(TransactionCase): + """ + Validates: Requirement 12.1 — ТОРГ-12 report generation for out_invoice + returns non-empty binary content without exceptions. + """ + + def setUp(self): + super().setUp() + self.invoice = _make_out_invoice(self.env) + + def test_torg12_report_values_no_exception(self): + """ + Req 12.1 — calling _get_report_values on the ТОРГ-12 report model + for an out_invoice returns a non-empty dict without exceptions. + """ + report_model = self.env['report.l10n_ru_doc.report_bill'] + result = report_model._get_report_values([self.invoice.id]) + self.assertIsInstance(result, dict, "Report values should be a dict") + self.assertIn('docs', result, "Report values should contain 'docs' key") + self.assertTrue(result['docs'], "Report docs should be non-empty") + + def test_torg12_html_render_returns_binary_content(self): + """ + Req 12.1 — rendering the ТОРГ-12 QWeb template for an out_invoice + returns non-empty binary content without exceptions. + """ + html_content, content_type = self.env['ir.actions.report']._render_qweb_html( + 'l10n_ru_doc.report_bill', [self.invoice.id] + ) + self.assertTrue(html_content, "ТОРГ-12 HTML render should return non-empty binary content") + self.assertIsInstance(html_content, bytes, "Rendered content should be bytes") + self.assertGreater(len(html_content), 0, "Rendered content should have non-zero length") + + def test_torg12_report_values_contains_helper(self): + """ + Req 12.1 — report values include the QWebHelper instance for formatting. + """ + report_model = self.env['report.l10n_ru_doc.report_bill'] + result = report_model._get_report_values([self.invoice.id]) + self.assertIn('helper', result, "Report values should contain 'helper' key") + self.assertIsNotNone(result['helper'], "Helper should not be None") diff --git a/l10n_ru_doc/views/account_invoice_view.xml b/l10n_ru_doc/views/account_invoice_view.xml new file mode 100644 index 00000000..891dcc15 --- /dev/null +++ b/l10n_ru_doc/views/account_invoice_view.xml @@ -0,0 +1,36 @@ + + + + + + account.invoice.ru.form + account.move + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ru_doc/views/l10n_ru_doc_data.xml b/l10n_ru_doc/views/l10n_ru_doc_data.xml new file mode 100644 index 00000000..169bcd74 --- /dev/null +++ b/l10n_ru_doc/views/l10n_ru_doc_data.xml @@ -0,0 +1,14 @@ + + + + + + + 1 + + + + + + + diff --git a/l10n_ru_doc/views/product.xml b/l10n_ru_doc/views/product.xml new file mode 100644 index 00000000..7fea41d1 --- /dev/null +++ b/l10n_ru_doc/views/product.xml @@ -0,0 +1,16 @@ + + + + + tnved_product + product.product + + + + + + + + + + diff --git a/l10n_ru_doc/views/res_bank_view.xml b/l10n_ru_doc/views/res_bank_view.xml new file mode 100644 index 00000000..7468aac3 --- /dev/null +++ b/l10n_ru_doc/views/res_bank_view.xml @@ -0,0 +1,18 @@ + + + + + + res.bank.ru.form + res.bank + form + + + + + + + + + + diff --git a/l10n_ru_doc/views/res_company_view.xml b/l10n_ru_doc/views/res_company_view.xml new file mode 100644 index 00000000..bb56f295 --- /dev/null +++ b/l10n_ru_doc/views/res_company_view.xml @@ -0,0 +1,42 @@ + + + + + + res.companyruform + res.company + + + + + + + + + + ИНН + + + ОГРН + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ru_doc/views/res_partner_view.xml b/l10n_ru_doc/views/res_partner_view.xml new file mode 100644 index 00000000..2e0c2fcd --- /dev/null +++ b/l10n_ru_doc/views/res_partner_view.xml @@ -0,0 +1,36 @@ + + + + + + res.partner.ru.form + res.partner + + + + + + + + + + ИНН + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ru_doc/views/res_users_view.xml b/l10n_ru_doc/views/res_users_view.xml new file mode 100644 index 00000000..e26c3a16 --- /dev/null +++ b/l10n_ru_doc/views/res_users_view.xml @@ -0,0 +1,33 @@ + + + + + + res.users.signature.form + res.users + + + + + + + + + + + + res.users.simple.form + res.users + + + + + + + + + + + + + diff --git a/l10n_ru_doc/views/tax.xml b/l10n_ru_doc/views/tax.xml new file mode 100644 index 00000000..3cefac62 --- /dev/null +++ b/l10n_ru_doc/views/tax.xml @@ -0,0 +1,17 @@ + + + + + view_taxiher_form + account.tax + + + + + + + + + + + diff --git a/l10n_ru_doc/views/uom.xml b/l10n_ru_doc/views/uom.xml new file mode 100644 index 00000000..d502879f --- /dev/null +++ b/l10n_ru_doc/views/uom.xml @@ -0,0 +1,16 @@ + + + + + view_uomiher_form + uom.uom + + + + + + + + + + diff --git a/l10n_ru_upd_xml/README.md b/l10n_ru_upd_xml/README.md new file mode 100644 index 00000000..4f5cc452 --- /dev/null +++ b/l10n_ru_upd_xml/README.md @@ -0,0 +1,9 @@ +# Российская локализация - УПД в xml-формате +name: l10n_ru_upd_xml + +## Описание +Формирует универсальный передаточный документ в формате XML. + +###Для печати: +1. Меню Бухгалтерия - Клиенты - Счета (account.move); +2. Кнопка "Печать УПД в xml-формате". diff --git a/l10n_ru_upd_xml/__init__.py b/l10n_ru_upd_xml/__init__.py new file mode 100644 index 00000000..9a4992b8 --- /dev/null +++ b/l10n_ru_upd_xml/__init__.py @@ -0,0 +1,3 @@ +from . import controllers +from . import models +from . import reports diff --git a/l10n_ru_upd_xml/__manifest__.py b/l10n_ru_upd_xml/__manifest__.py new file mode 100644 index 00000000..e1ee6654 --- /dev/null +++ b/l10n_ru_upd_xml/__manifest__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Российская локализация - УПД в xml-формате", + + 'summary': """ + Формирует УПД в формате XML, формат 5.01""", + + 'description': """ + Формирует УПД в формате XML. + + Для печати: + 1. Меню Бухгалтерия - Клиенты - Счета (account.move); + 2. Кнопка "Печать УПД в xml-формате". + """, + + 'author': "MK.Lab", + 'website': "https://www.inf-centre.ru/", + + 'category': 'Uncategorized', + 'version': '19.0.2025.12.11', + "depends": ["web", "base", "account", "account_payment", "l10n_ru_doc", "l10n_ru_base", "uom"], + "data": [ + "views/ir_actions_report_view.xml", + "views/res_partner_view.xml", + "views/res_company_view.xml", + "views/res_users_view.xml", + "views/views_uom_okei.xml", + "views/view_account_move.xml", + "reports/report.xml", + "reports/upd_report.xml", + ], + + "assets": { + "web.assets_backend": [ + "l10n_ru_upd_xml/static/src/js/report/action_manager_report.js", + ], + }, + + "external_dependencies": { + "python": [ + "lxml" + ] + }, + "demo": [ + "demo/demo.xml", + ], +} diff --git a/l10n_ru_upd_xml/controllers/__init__.py b/l10n_ru_upd_xml/controllers/__init__.py new file mode 100644 index 00000000..65a8c120 --- /dev/null +++ b/l10n_ru_upd_xml/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import main diff --git a/l10n_ru_upd_xml/controllers/main.py b/l10n_ru_upd_xml/controllers/main.py new file mode 100644 index 00000000..d5e9a658 --- /dev/null +++ b/l10n_ru_upd_xml/controllers/main.py @@ -0,0 +1,91 @@ +# Copyright (C) 2014-2015 Grupo ESOC +# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html). + +import json +import logging + +from werkzeug.urls import url_parse + +from odoo.http import content_disposition, request, route, serialize_exception +from odoo.tools import html_escape +from odoo.tools.safe_eval import safe_eval, time + +from odoo.addons.web.controllers import report + +_logger = logging.getLogger(__name__) + + +class ReportController(report.ReportController): + @route() + def report_routes( + self, reportname, docids=None, converter=None, options=None, **kwargs + ): + if converter != "xml": + return super().report_routes( + reportname, + docids=docids, + converter=converter, + options=options, + **kwargs, + ) + if docids: + docids = [int(_id) for _id in docids.split(",")] + data = {**json.loads(options or "{}"), **kwargs} + context = dict(request.env.context) + if "context" in data: + data["context"] = json.loads(data["context"] or "{}") + # Ignore 'lang' here, because the context in data is the one from the + # webclient *but* if the user explicitely wants to change the lang, this + # mechanism overwrites it. + if "lang" in data["context"]: + del data["context"]["lang"] + context.update(data["context"]) + report_Obj = request.env["ir.actions.report"] + xml = report_Obj.with_context(**context)._render_qweb_xml( + reportname, docids, data=data + )[0] + xmlhttpheaders = [("Content-Type", "text/xml"), ("Content-Length", len(xml))] + return request.make_response(xml, headers=xmlhttpheaders) + + @route() + def report_download(self, data, context=None, token=None): + requestcontent = json.loads(data) + url, report_type = requestcontent[0], requestcontent[1] + reportname = "???" + if report_type != "qweb-xml": + return super().report_download(data, context=context, token=token) + try: + reportname = url.split("/report/xml/")[1].split("?")[0] + docids = None + if "/" in reportname: + reportname, docids = reportname.split("/") + report = request.env["ir.actions.report"]._get_report_from_name(reportname) + filename = None + if docids: + response = self.report_routes( + reportname, docids=docids, converter="xml", context=context + ) + ids = [int(x) for x in docids.split(",")] + obj = request.env[report.model].browse(ids) + if report.print_report_name and not len(obj) > 1: + report_name = safe_eval( + report.print_report_name, {"object": obj, "time": time} + ) + filename = f"{report_name}.{report.xml_extension}" + else: + data = url_parse(url).decode_query(cls=dict) + if "context" in data: + context = json.loads(context or "{}") + data_context = json.loads(data.pop("context")) + context = json.dumps({**context, **data_context}) + response = self.report_routes( + reportname, converter="xml", context=context, **data + ) + filename = filename or f"{report.name}.{report.xml_extension}" + response.headers.add("Content-Disposition", content_disposition(filename)) + return response + except Exception as e: + _logger.exception(f"Error while generating report {reportname}") + se = serialize_exception(e) + error = {"code": 200, "message": "Odoo Server Error", "data": se} + return request.make_response(html_escape(json.dumps(error))) diff --git a/l10n_ru_upd_xml/demo/demo.xml b/l10n_ru_upd_xml/demo/demo.xml new file mode 100644 index 00000000..6b456569 --- /dev/null +++ b/l10n_ru_upd_xml/demo/demo.xml @@ -0,0 +1,11 @@ + + + + + + + 796 + + + + diff --git a/l10n_ru_upd_xml/models/__init__.py b/l10n_ru_upd_xml/models/__init__.py new file mode 100644 index 00000000..b1c835fc --- /dev/null +++ b/l10n_ru_upd_xml/models/__init__.py @@ -0,0 +1,7 @@ +from . import ir_actions_report +from . import res_company +from . import res_partner +from . import res_users +from . import uom_uom +from . import account_move +from . import account_move_line diff --git a/l10n_ru_upd_xml/models/account_move.py b/l10n_ru_upd_xml/models/account_move.py new file mode 100644 index 00000000..d7aae5c3 --- /dev/null +++ b/l10n_ru_upd_xml/models/account_move.py @@ -0,0 +1,207 @@ +from odoo import api, fields, models, _ +import hashlib +from odoo.exceptions import UserError + + +class AccountMove(models.Model): + _inherit = 'account.move' + + edi = fields.Char(string=_('ID EDI'), compute='_compute_sh1_edi') + kpp = fields.Char(string=_('КПП'), compute='_compute_get_kpp') + + def _compute_get_kpp(self): + for s in self: + pid = self.partner_id.parent_id or self.partner_id + + s.kpp = pid.kpp if (s.partner_id == s.partner_shipping_id or not s.partner_shipping_id) else s.partner_shipping_id.kpp + + @api.depends('name') + def _compute_sh1_edi(self): + hash_object = hashlib.sha1((self.name).encode('utf-8')) + pid = self.partner_id.parent_id or self.partner_id + self.edi = 'ON_NSCHFDOPPR_2BM-' + str(pid.edi) + '_' + str(self.company_id.edi) + '_' + hash_object.hexdigest() + + def print_upd(self): + for s in self: + mes = str(s.check_correct_upd()).strip() + if mes != "": + raise UserError(_(u"Не удалось сформировать УПД. Выявлены следующие ошибки:\n{}".format(mes))) + else: + return self.env.ref('l10n_ru_upd_xml.upd_xml_report').sudo().report_action(s.id) # render_qweb_xml(s.id) + + def check_correct_upd(self, manually=True): + for s in self: + mes = "" + company = s.company_id + if s.name == '/': + mes += u"Отсутствует наименование документа. Проверидите документ, чтобы назваие сформировалось автоматически.\n" + if not s.only_service and s.get_delivery_doc_name() == '0': + mes += u"Отсутствуют связанные отгрузки.\n" + if not company: + company = self.env.company + if not company: + mes += u"Не указана компания.\n" + else: + if not company.edi: + mes += u"Не указан идентификатор компании для Diadoc.\n" + if not company.name: + mes += u"Не указано наименование компании.\n" + if not company.okpo: + mes += u"Не указано ОКПО компании.\n" + if not company.inn: + mes += u"Не указан ИНН компании.\n" + else: + if len(company.inn) == 12: + if not company.partner_id.last_name_IP: + mes += u"Не указана фамилия ИП для вашей компании.\n" + if not company.partner_id.first_name_IP: + mes += u"Не указано имя ИП для вашей компании.\n" + if not company.partner_id.middle_name_IP: + mes += u"Не указано отчество ИП для вашей компании.\n" + elif len(company.inn) == 10: + if not company.kpp: + mes += u"Не указан КПП компании.\n" + else: + mes += u"Некорректный ИНН компании.\n" + if not company.city: + mes += u"Не указан город компании.\n" + if not company.street: + mes += u"Не указан адрес компании.\n" + if not company.chief_id: + mes += u"Не указан руководитель компании.\n" + else: + if not company.chief_id.function: + mes += u"Не указана должность руководителя компании.\n" + if not company.chief_id.last_name: + mes += u"Не указана фамилия руководителя компании.\n" + if not company.chief_id.first_name: + mes += u"Не указано имя руководителя компании.\n" + if not company.chief_id.second_name: + mes += u"Не указано отчество руководителя компании.\n" + pid = s.partner_id.parent_id + if not pid: + pid = s.partner_id + if not pid: + mes += u"Не указан контрагент.\n" + else: + if not pid.edi: + mes += u"Не указан идентификатор контрагента для Diadoc.\n" + if not pid.name: + mes += u"Не указано наименование контрагента.\n" + if not pid.okpo: + mes += u"Не указано ОКПО контрагента.\n" + if not pid.inn: + mes += u"Не указан ИНН контрагента.\n" + else: + if len(pid.inn) == 12: + if not pid.last_name_IP: + mes += u"Не указана фамилия ИП для контрагента.\n" + if not pid.first_name_IP: + mes += u"Не указано имя ИП для контрагента.\n" + if not pid.middle_name_IP: + mes += u"Не указано отчество ИП для контрагента.\n" + elif len(pid.inn) == 10: + if not pid.kpp: + mes += u"Не указан КПП контрагента.\n" + else: + mes += u"Некорректный ИНН контрагента.\n" + if not pid.city: + mes += u"Не указан город контрагента.\n" + if not pid.street: + mes += u"Не указан адрес контрагента.\n" + if manually: + if not s.edi: + mes += u"Не указан идентификатор документа для Diadoc.\n" + if not s.name: + mes += u"Не указано наименование документа\n" + if not s.invoice_date: + mes += u"Не указана дата документа\n" + if not s.only_service: + gruzootpr = s.gruzootpr + if not gruzootpr: + gruzootpr = pid + if gruzootpr.parent_id: + gruzootpr = gruzootpr.parent_id + if not gruzootpr: + mes += u"Не указан грузоотправитель.\n" + else: + if not gruzootpr.name: + mes += u"Не указано наименование грузоотправителя.\n" + if not gruzootpr.okpo: + mes += u"Не указано ОКПО грузоотправителя.\n" + if not gruzootpr.inn: + mes += u"Не указан ИНН грузоотправителя.\n" + else: + if len(gruzootpr.inn) == 12: + if not gruzootpr.last_name_IP: + mes += u"Не указана фамилия ИП для грузоотправителя.\n" + if not gruzootpr.first_name_IP: + mes += u"Не указано имя ИП для грузоотправителя.\n" + if not gruzootpr.middle_name_IP: + mes += u"Не указано отчество ИП для грузоотправителя.\n" + elif len(gruzootpr.inn) == 10: + if not gruzootpr.kpp: + mes += u"Не указан КПП грузоотправителя.\n" + else: + mes += u"Некорректный ИНН грузоотправителя.\n" + if not gruzootpr.city: + mes += u"Не указан город грузоотправителя.\n" + if not gruzootpr.street: + mes += u"Не указан адрес грузоотправителя.\n" + gruzopol = s.gruzopol + if not gruzopol: + gruzopol = pid + if gruzopol.parent_id: + gruzopol = gruzopol.parent_id + if not gruzopol: + mes += u"Не указан грузополучатель.\n" + else: + if not gruzopol.name: + mes += u"Не указано наименование грузополучателя.\n" + if not gruzopol.okpo: + mes += u"Не указано ОКПО грузополучателя.\n" + if not gruzopol.inn: + mes += u"Не указан ИНН грузополучателя.\n" + else: + if len(gruzopol.inn) == 12: + if not gruzopol.last_name_IP: + mes += u"Не указана фамилия ИП для грузополучателя.\n" + if not gruzopol.first_name_IP: + mes += u"Не указано имя ИП для грузополучателя.\n" + if not gruzopol.middle_name_IP: + mes += u"Не указано отчество ИП для грузополучателя.\n" + elif len(gruzopol.inn) == 10: + if not gruzopol.kpp: + mes += u"Не указан КПП грузополучателя.\n" + else: + mes += u"Некорректный ИНН грузополучателя.\n" + if not gruzopol.city: + mes += u"Не указан город грузополучателя.\n" + if not gruzopol.street: + mes += u"Не указан адрес грузополучателя.\n" + if s.payment_num: + if not s.payment_date: + mes += u"Не указана дата платежки в УПД.\n" + if not s.invoice_line_ids: + mes += u"Отсутствуют строки заказа.\n" + else: + for line in s.invoice_line_ids: + if not line.price_unit: + mes += u"Не указана цена за единицу для товара {}.\n".format(line.name) + if not line.quantity: + mes += u"Не указано количество для товара {}.\n".format(line.name) + if not line.product_uom_id.okei: + mes += u"Не указан код ОКЕИ для единицы измерения {}.\n".format(line.product_uom_id.name) + if not s.mt_contract_id: + mes += u"Не указан договор.\n" + else: + if not s.mt_contract_id.name: + mes += u"Не указано наименование договора.\n" + if not s.mt_contract_id.date_start: + mes += u"Не указана дата договора.\n" + if not s.kladov: + mes += u"Не указано лицо, ответственное за передачу товаров/услуг.\n" + else: + if not s.kladov.partner_id.function: + mes += u"Не указана должность лица, ответственного за передачу товаров/услуг.\n" + return str(mes) diff --git a/l10n_ru_upd_xml/models/account_move_line.py b/l10n_ru_upd_xml/models/account_move_line.py new file mode 100644 index 00000000..ae892d1e --- /dev/null +++ b/l10n_ru_upd_xml/models/account_move_line.py @@ -0,0 +1,7 @@ +from odoo import models, fields, api, _ + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + uom_okei = fields.Char(string=_('Код ОКЕИ'), related='product_uom_id.okei') diff --git a/l10n_ru_upd_xml/models/ir_actions_report.py b/l10n_ru_upd_xml/models/ir_actions_report.py new file mode 100644 index 00000000..8ba5d600 --- /dev/null +++ b/l10n_ru_upd_xml/models/ir_actions_report.py @@ -0,0 +1,62 @@ +from odoo import fields, models, api + + +class IrActionsReport(models.Model): + _inherit = "ir.actions.report" + + report_type = fields.Selection( + selection_add=[("qweb-xml", "XML")], ondelete={"qweb-xml": "set default"} + ) + xsd_schema = fields.Binary( + string="XSD Validation Schema", + attachment=True, + help="File with XSD Schema for checking content of result report. Can be empty " + "if validation is not required.", + ) + xml_encoding = fields.Selection( + selection=[ + ("WINDOWS-1251", "WINDOWS-1251") # will be used as default even if nothing is selected + ], + string="XML Encoding", + help=( + "Encoding for XML reports. If nothing is selected, " + "then UTF-8 will be applied." + ), + ) + xml_declaration = fields.Boolean( + string="XML Declaration", + help=( + """Add `` at the start """ + """of final report file.""" + ), + default=True, + ) + xml_extension = fields.Char( + default="xml", + help="Extension for XML Reports, by default is `xml`", + ) + + @api.model + def _render_qweb_xml(self, report_ref, res_ids, data=None): + """ + Call `generate_report` method of report abstract class + `report.` or of standard class for XML report + rendering - `report.report_xml.abstract` + + Args: + * docids(list) - IDs of instances for those report will be generated + * data(dict, None) - variables for report rendering + + Returns: + * str - result content of report + * str - type of result content + """ + report = self._get_report(report_ref) + report_model = self.env.get( + f"report.{report.report_name}", self.env["report.upd_xml.abstract"] + ) + return report_model.generate_report( + ir_report=report, # will be used to get settings of report + docids=res_ids, + data=data or {}, + ) diff --git a/l10n_ru_upd_xml/models/res_company.py b/l10n_ru_upd_xml/models/res_company.py new file mode 100644 index 00000000..91619d64 --- /dev/null +++ b/l10n_ru_upd_xml/models/res_company.py @@ -0,0 +1,11 @@ +from odoo import fields, models, _ + + +class ResCompany(models.Model): + _inherit = 'res.company' + + inn = fields.Char(related='partner_id.inn', readonly=False, string=_('ИНН')) + kpp = fields.Char(related='partner_id.kpp', readonly=False, string=_('КПП')) + okpo = fields.Char(related='partner_id.okpo', readonly=False, string=_('ОКПО')) + edi = fields.Char(string='ID EDI', readonly=False) + chief_id = fields.Many2one('res.users', string=_('Управляющий')) diff --git a/l10n_ru_upd_xml/models/res_partner.py b/l10n_ru_upd_xml/models/res_partner.py new file mode 100644 index 00000000..4dbf28b4 --- /dev/null +++ b/l10n_ru_upd_xml/models/res_partner.py @@ -0,0 +1,36 @@ +from odoo import api, fields, models, _ + +class ResPartner(models.Model): + _inherit = 'res.partner' + + inn = fields.Char(_('ИНН'), size=12) + kpp = fields.Char(_('КПП'), size=9) + okpo = fields.Char(_('ОКПО'), size=14) + edi = fields.Char(_('ID EDI')) + house = fields.Char(_('Дом')) + office = fields.Char(_('Квартира, офис')) + fias_id = fields.Char(_('Код ФИАС')) + last_name_IP = fields.Char(_('Фамилия ИП'), compute='_compute_get_fio', readonly=False) + first_name_IP = fields.Char(_('Имя ИП'), compute='_compute_get_fio', readonly=False) + middle_name_IP = fields.Char(_('Отчество ИП'), compute='_compute_get_fio', readonly=False) + + @api.depends('name') + def _compute_get_fio(self): + for s in self: + if s.name: + name = s.name + if name.find('ИП ') != -1: + name = name[name.find(' ') + 1:] + s.last_name_IP = name[:name.find(' ')] + name = name[name.find(' ') + 1:] + s.first_name_IP = name[:name.find(' ')] + name = name[name.find(' ') + 1:] + s.middle_name_IP = name + else: + s.last_name_IP = "" + s.first_name_IP = "" + s.middle_name_IP = "" + else: + s.last_name_IP = "" + s.first_name_IP = "" + s.middle_name_IP = "" diff --git a/l10n_ru_upd_xml/models/res_users.py b/l10n_ru_upd_xml/models/res_users.py new file mode 100644 index 00000000..4ac723bf --- /dev/null +++ b/l10n_ru_upd_xml/models/res_users.py @@ -0,0 +1,25 @@ +from odoo import api, fields, models, _ + +class ResUsers(models.Model): + _inherit = 'res.users' + + last_name = fields.Char(string=_('Фамилия'), compute='_compute_update_name') + first_name = fields.Char(string=_('Имя'), compute='_compute_update_name') + second_name = fields.Char(string=_('Отчество'), compute='_compute_update_name') + + @api.depends('name') + def _compute_update_name(self): + for s in self: + s.last_name = '' + s.first_name = '' + s.second_name = '' + if s.name: + s.last_name = s.name + s.first_name = '' + s.second_name = '' + if len(s.name.split(' ')) == 3: + s.last_name, s.first_name, s.second_name = s.name.split(' ') + if len(s.name.split(' ')) == 4: + s.last_name, s.first_name, second_name1, second_name2 = s.name.split(' ') + s.second_name = second_name1 + ' ' + second_name2 + diff --git a/l10n_ru_upd_xml/models/uom_uom.py b/l10n_ru_upd_xml/models/uom_uom.py new file mode 100644 index 00000000..88cd122f --- /dev/null +++ b/l10n_ru_upd_xml/models/uom_uom.py @@ -0,0 +1,7 @@ +from odoo import fields, models, _ + + +class UomUom(models.Model): + _inherit = "uom.uom" + + okei = fields.Char(string="Код ОКЕИ") diff --git a/l10n_ru_upd_xml/reports/__init__.py b/l10n_ru_upd_xml/reports/__init__.py new file mode 100644 index 00000000..fff0f44d --- /dev/null +++ b/l10n_ru_upd_xml/reports/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html). + +from . import report_report_xml_abstract diff --git a/l10n_ru_upd_xml/reports/demo_report.xml b/l10n_ru_upd_xml/reports/demo_report.xml new file mode 100644 index 00000000..5eae7775 --- /dev/null +++ b/l10n_ru_upd_xml/reports/demo_report.xml @@ -0,0 +1,76 @@ + + + + diff --git a/l10n_ru_upd_xml/reports/report.xml b/l10n_ru_upd_xml/reports/report.xml new file mode 100644 index 00000000..e6c6fcf5 --- /dev/null +++ b/l10n_ru_upd_xml/reports/report.xml @@ -0,0 +1,14 @@ + + + + + УПД xml + account.move + qweb-xml + l10n_ru_upd_xml.demo_report_xml_view + l10n_ru_upd_xml.demo_report_xml_view + '%s' % (object.edi) + + report + + diff --git a/l10n_ru_upd_xml/reports/report_report_xml_abstract.py b/l10n_ru_upd_xml/reports/report_report_xml_abstract.py new file mode 100644 index 00000000..71e8e32d --- /dev/null +++ b/l10n_ru_upd_xml/reports/report_report_xml_abstract.py @@ -0,0 +1,177 @@ +# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html). + +from xml.dom import minidom +from odoo.exceptions import UserError +from odoo.tools.translate import _ +from lxml import etree + +from odoo import api, models + + +class ReportXmlAbstract(models.AbstractModel): + _name = "report.upd_xml.abstract" + _description = "Abstract XML Report" + + @api.model + def generate_report(self, ir_report, docids, data=None): + data = data or {} + data.setdefault("report_type", "text") + + records = self.env[ir_report.model].browse(docids) + + for s in records: + mes = "" + company = s.company_id or self.env.company + + # --- базовые проверки --- + if s.name == '/': + mes += "Отсутствует наименование документа. Проведите документ.\n" + + if not s.only_service: + get_delivery = getattr(s, "get_delivery_doc_name", lambda: '0') + if get_delivery() == '0': + mes += "Отсутствуют связанные отгрузки.\n" + + # --- компания --- + if not company: + mes += "Не указана компания.\n" + else: + if not company.edi: + mes += "Не указан идентификатор компании для Diadoc.\n" + if not company.name: + mes += "Не указано наименование компании.\n" + if not company.okpo: + mes += "Не указано ОКПО компании.\n" + + if not company.inn: + mes += "Не указан ИНН компании.\n" + else: + if len(company.inn) == 12: + if not company.partner_id.last_name_IP: + mes += "Не указана фамилия ИП компании.\n" + if not company.partner_id.first_name_IP: + mes += "Не указано имя ИП компании.\n" + if not company.partner_id.middle_name_IP: + mes += "Не указано отчество ИП компании.\n" + elif len(company.inn) == 10: + if not company.kpp: + mes += "Не указан КПП компании.\n" + else: + mes += "Некорректный ИНН компании.\n" + + if not company.city: + mes += "Не указан город компании.\n" + if not company.street: + mes += "Не указан адрес компании.\n" + + if not company.chief_id: + mes += "Не указан руководитель компании.\n" + else: + if not company.chief_id.function: + mes += "Не указана должность руководителя.\n" + if not company.chief_id.last_name: + mes += "Не указана фамилия руководителя.\n" + if not company.chief_id.first_name: + mes += "Не указано имя руководителя.\n" + if not company.chief_id.second_name: + mes += "Не указано отчество руководителя.\n" + + # --- контрагент --- + pid = s.partner_id.parent_id or s.partner_id + + if not pid: + mes += "Не указан контрагент.\n" + else: + if not pid.edi: + mes += "Не указан идентификатор контрагента.\n" + if not pid.name: + mes += "Не указано наименование контрагента.\n" + if not pid.okpo: + mes += "Не указано ОКПО контрагента.\n" + + if not pid.inn: + mes += "Не указан ИНН контрагента.\n" + else: + if len(pid.inn) == 12: + if not pid.last_name_IP: + mes += "Не указана фамилия ИП контрагента.\n" + if not pid.first_name_IP: + mes += "Не указано имя ИП контрагента.\n" + if not pid.middle_name_IP: + mes += "Не указано отчество ИП контрагента.\n" + elif len(pid.inn) == 10: + if not pid.kpp: + mes += "Не указан КПП контрагента.\n" + else: + mes += "Некорректный ИНН контрагента.\n" + + if not pid.city: + mes += "Не указан город контрагента.\n" + if not pid.street: + mes += "Не указан адрес контрагента.\n" + + # --- документ --- + if not s.edi: + mes += "Не указан идентификатор документа.\n" + if not s.name: + mes += "Не указано наименование документа.\n" + if not s.invoice_date: + mes += "Не указана дата документа.\n" + + # --- строки --- + if not s.invoice_line_ids: + mes += "Отсутствуют строки.\n" + else: + for line in s.invoice_line_ids: + if not line.price_unit: + mes += f"Нет цены: {line.name}\n" + if not line.quantity: + mes += f"Нет количества: {line.name}\n" + if not line.product_uom_id.okei: + mes += f"Нет ОКЕИ: {line.product_uom_id.name}\n" + + # --- договор --- + # if not s.mt_contract_id: + # mes += "Не указан договор.\n" + # else: + # if not s.mt_contract_id.name: + # mes += "Нет названия договора.\n" + # if not s.mt_contract_id.date_start: + # mes += "Нет даты договора.\n" + + # --- ответственный --- + if not s.kladov: + mes += "Не указано ответственное лицо.\n" + else: + if not s.kladov.partner_id.function: + mes += "Не указана должность ответственного.\n" + + # ❗ если есть ошибки → стоп + if mes: + raise UserError(_( + "Не удалось сформировать УПД. Выявлены следующие ошибки:\n%s" + ) % mes) + + data = ir_report._get_rendering_context(ir_report, docids, data) + + result_bin = ir_report._render_template(ir_report.report_name, data) + + parsed_result_bin = minidom.parseString(result_bin) + result = parsed_result_bin.toprettyxml(indent=" ") + + result = "\n".join( + line for line in result.splitlines() if line and not line.isspace() + ).encode("utf8") + + content = etree.tostring( + etree.fromstring(result), + encoding=ir_report.xml_encoding or "WINDOWS-1251", + xml_declaration=True, + pretty_print=True, + ) + + return content, "xml" + + @api.model + def _get_report_values(self, docids, data=None): + return data or {} diff --git a/l10n_ru_upd_xml/reports/upd_report.xml b/l10n_ru_upd_xml/reports/upd_report.xml new file mode 100644 index 00000000..7dd9798c --- /dev/null +++ b/l10n_ru_upd_xml/reports/upd_report.xml @@ -0,0 +1,344 @@ + + + + \ No newline at end of file diff --git a/l10n_ru_upd_xml/security/ir.model.access.csv b/l10n_ru_upd_xml/security/ir.model.access.csv new file mode 100644 index 00000000..7a894804 --- /dev/null +++ b/l10n_ru_upd_xml/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_upd_xml_upd_xml,upd_xml.upd_xml,model_upd_xml_upd_xml,base.group_user,1,1,1,1 diff --git a/l10n_ru_upd_xml/static/src/js/report/action_manager_report.js b/l10n_ru_upd_xml/static/src/js/report/action_manager_report.js new file mode 100644 index 00000000..c35cec85 --- /dev/null +++ b/l10n_ru_upd_xml/static/src/js/report/action_manager_report.js @@ -0,0 +1,56 @@ +/** @odoo-module **/ + +import {download} from "@web/core/network/download"; +import {registry} from "@web/core/registry"; + +function getReportUrl(action) { + + let url = `/report/xml/${action.report_name}`; + + const actionContext = action.context || {}; + + if (action.data && JSON.stringify(action.data) !== "{}") { + + const encodedOptions = encodeURIComponent( + JSON.stringify(action.data) + ); + + const encodedContext = encodeURIComponent( + JSON.stringify(actionContext) + ); + + return `${url}?options=${encodedOptions}&context=${encodedContext}`; + } + + if (actionContext.active_ids) { + url += `/${actionContext.active_ids.join(",")}`; + } + + return `${url}?context=${encodeURIComponent(JSON.stringify(actionContext))}`; +} +async function triggerDownload(action) { + + const data = JSON.stringify([ + getReportUrl(action), + action.report_type, + ]); + + const context = JSON.stringify(action.context || {}); + + await download({ + url: "/report/download", + data: { data, context }, + }); +} +registry + .category("ir.actions.report handlers") + .add("xml_handler", async function (action, options) { + + if (action.report_type !== "qweb-xml") { + return false; + } + + await triggerDownload(action); + + return true; + }); \ No newline at end of file diff --git a/l10n_ru_upd_xml/tests/__init__.py b/l10n_ru_upd_xml/tests/__init__.py new file mode 100644 index 00000000..7c58709f --- /dev/null +++ b/l10n_ru_upd_xml/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import test_upd_xml diff --git a/l10n_ru_upd_xml/tests/test_upd_xml.py b/l10n_ru_upd_xml/tests/test_upd_xml.py new file mode 100644 index 00000000..763138cd --- /dev/null +++ b/l10n_ru_upd_xml/tests/test_upd_xml.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +""" +Tests for l10n_ru_upd_xml — УПД XML generation. + +Validates: Requirements 12.2, 12.4 +""" +from odoo.tests.common import TransactionCase +from odoo.tests import tagged +from odoo.exceptions import UserError + + +def _make_company_partner(env): + """Return or create a company partner with INN (10 digits) and KPP.""" + partner = env['res.partner'].search( + [('is_company', '=', True), ('inn', '!=', False), ('kpp', '!=', False)], + limit=1, + ) + if not partner: + partner = env['res.partner'].create({ + 'name': 'ООО Тест УПД', + 'is_company': True, + 'inn': '7700000001', + 'kpp': '770001001', + 'okpo': '12345678', + 'city': 'Москва', + 'street': 'ул. Тестовая, 1', + }) + return partner + + +def _make_out_invoice(env): + """Create a minimal out_invoice with all fields required for УПД.""" + partner = _make_company_partner(env) + + journal = env['account.journal'].search( + [('type', '=', 'sale'), ('company_id', '=', env.company.id)], limit=1 + ) + if not journal: + journal = env['account.journal'].create({ + 'name': 'Test Sales Journal UPD', + 'type': 'sale', + 'code': 'TUPD', + }) + + move = env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner.id, + 'journal_id': journal.id, + 'invoice_date': '2024-06-01', + }) + return move + + +@tagged('post_install', '-at_install') +class TestUpdXml(TransactionCase): + """ + Tests for УПД XML generation. + + Validates: Requirements 12.2, 12.4 + """ + + def setUp(self): + super().setUp() + self.invoice = _make_out_invoice(self.env) + + # ------------------------------------------------------------------ + # Requirement 12.2 — XML generation returns a valid XML document + # ------------------------------------------------------------------ + + def test_upd_xml_render_returns_valid_xml(self): + """ + Req 12.2 — rendering the УПД XML QWeb template for an account.move + returns non-empty bytes that parse as valid XML. + """ + import xml.etree.ElementTree as ET + + xml_content, content_type = self.env['ir.actions.report']._render_qweb_xml( + 'l10n_ru_upd_xml.demo_report_xml_view', [self.invoice.id] + ) + self.assertTrue(xml_content, "УПД XML render should return non-empty content") + self.assertIsInstance(xml_content, bytes, "Rendered content should be bytes") + + # Must parse without exception — proves it is valid XML + try: + root = ET.fromstring(xml_content) + except ET.ParseError as exc: + self.fail(f"Rendered УПД is not valid XML: {exc}") + + self.assertIsNotNone(root, "Parsed XML root element should not be None") + + # ------------------------------------------------------------------ + # Requirement 12.4 — missing INN/KPP raises UserError + # ------------------------------------------------------------------ + + def test_check_correct_upd_missing_inn_returns_error_message(self): + """ + Req 12.4 — check_correct_upd on an account.move whose partner has no INN + returns a non-empty error string mentioning the missing field. + """ + partner_no_inn = self.env['res.partner'].create({ + 'name': 'Партнёр без ИНН', + 'is_company': True, + # inn intentionally omitted + }) + journal = self.env['account.journal'].search( + [('type', '=', 'sale'), ('company_id', '=', self.env.company.id)], limit=1 + ) + move = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner_no_inn.id, + 'journal_id': journal.id, + 'invoice_date': '2024-06-01', + }) + + error_msg = move.check_correct_upd(manually=False) + self.assertTrue( + error_msg.strip(), + "check_correct_upd should return a non-empty error string when INN is missing", + ) + self.assertIn('ИНН', error_msg, "Error message should mention ИНН") + + def test_print_upd_missing_inn_raises_user_error(self): + """ + Req 12.4 — print_upd on an account.move whose partner has no INN + raises UserError describing the missing fields. + """ + partner_no_inn = self.env['res.partner'].create({ + 'name': 'Партнёр без ИНН для print_upd', + 'is_company': True, + # inn intentionally omitted + }) + journal = self.env['account.journal'].search( + [('type', '=', 'sale'), ('company_id', '=', self.env.company.id)], limit=1 + ) + move = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner_no_inn.id, + 'journal_id': journal.id, + 'invoice_date': '2024-06-01', + }) + + with self.assertRaises(UserError) as ctx: + move.print_upd() + + self.assertIn('ИНН', str(ctx.exception), + "UserError message should mention ИНН") + + def test_print_upd_missing_kpp_raises_user_error(self): + """ + Req 12.4 — print_upd on an account.move whose partner has INN (10 digits) + but no KPP raises UserError describing the missing КПП. + """ + partner_no_kpp = self.env['res.partner'].create({ + 'name': 'Партнёр без КПП', + 'is_company': True, + 'inn': '7700000099', + # kpp intentionally omitted + }) + journal = self.env['account.journal'].search( + [('type', '=', 'sale'), ('company_id', '=', self.env.company.id)], limit=1 + ) + move = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'partner_id': partner_no_kpp.id, + 'journal_id': journal.id, + 'invoice_date': '2024-06-01', + }) + + with self.assertRaises(UserError) as ctx: + move.print_upd() + + self.assertIn('КПП', str(ctx.exception), + "UserError message should mention КПП") diff --git a/l10n_ru_upd_xml/views/ir_actions_report_view.xml b/l10n_ru_upd_xml/views/ir_actions_report_view.xml new file mode 100644 index 00000000..1a22f939 --- /dev/null +++ b/l10n_ru_upd_xml/views/ir_actions_report_view.xml @@ -0,0 +1,24 @@ + + + + ir.actions.report.view.form.report.xml + ir.actions.report + + + + + + + + + + + + + diff --git a/l10n_ru_upd_xml/views/res_company_view.xml b/l10n_ru_upd_xml/views/res_company_view.xml new file mode 100644 index 00000000..6168f0dd --- /dev/null +++ b/l10n_ru_upd_xml/views/res_company_view.xml @@ -0,0 +1,14 @@ + + + + res.company.ru.form + res.company + + + + + + + + + diff --git a/l10n_ru_upd_xml/views/res_partner_view.xml b/l10n_ru_upd_xml/views/res_partner_view.xml new file mode 100644 index 00000000..9db8c9eb --- /dev/null +++ b/l10n_ru_upd_xml/views/res_partner_view.xml @@ -0,0 +1,21 @@ + + + + res.partner.ru.form + res.partner + + + + + + + + + + + + + + + + diff --git a/l10n_ru_upd_xml/views/res_users_view.xml b/l10n_ru_upd_xml/views/res_users_view.xml new file mode 100644 index 00000000..d2aa9be6 --- /dev/null +++ b/l10n_ru_upd_xml/views/res_users_view.xml @@ -0,0 +1,17 @@ + + + + res.users.signature.form + res.users + + + + + + + + + + + + diff --git a/l10n_ru_upd_xml/views/view_account_move.xml b/l10n_ru_upd_xml/views/view_account_move.xml new file mode 100644 index 00000000..1d0fc0dc --- /dev/null +++ b/l10n_ru_upd_xml/views/view_account_move.xml @@ -0,0 +1,19 @@ + + + + account.move.form.upd.button.header + account.move + + + +