From fb681d13057fbdc2e638083183ad8a375cac4e0f Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 6 Jul 2023 06:15:22 +0000 Subject: [PATCH] [I18N] *: export translations closes odoo/documentation#5069 X-original-commit: 921b483e2ef4038749dc96312954080a3358fc7b Signed-off-by: Martin Trigaux (mat) --- locale/sources/administration.pot | 277 +- locale/sources/contributing.pot | 2 +- locale/sources/developer.pot | 34065 +++++++++++++++++++++++++ locale/sources/finance.pot | 2209 +- locale/sources/general.pot | 4 +- locale/sources/inventory_and_mrp.pot | 1406 +- locale/sources/legal.pot | 2 +- locale/sources/marketing.pot | 2 +- locale/sources/productivity.pot | 920 +- locale/sources/sales.pot | 274 +- locale/sources/services.pot | 714 +- locale/sources/websites.pot | 971 +- 12 files changed, 39090 insertions(+), 1756 deletions(-) create mode 100644 locale/sources/developer.pot diff --git a/locale/sources/administration.pot b/locale/sources/administration.pot index 633b8d55f..1a2e493e9 100644 --- a/locale/sources/administration.pot +++ b/locale/sources/administration.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo saas-16.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-20 08:18+0000\n" +"POT-Creation-Date: 2023-07-10 08:34+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -192,7 +192,7 @@ msgstr "" #: ../../content/administration/install/deploy.rst:58 #: ../../content/administration/install/deploy.rst:153 #: ../../content/administration/install/deploy.rst:276 -msgid "in ``/etc/odoo.conf`` set:" +msgid "in :ref:`the configuration file ` set:" msgstr "" #: ../../content/administration/install/deploy.rst:53 @@ -409,7 +409,7 @@ msgid "RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo" msgstr "" #: ../../content/administration/install/deploy.rst:241 -msgid "in ``/etc/odoo.conf``:" +msgid "in :ref:`the configuration file `:" msgstr "" #: ../../content/administration/install/deploy.rst:257 @@ -1709,6 +1709,7 @@ msgid ":doc:`../../applications/general/email_communication/email_servers`" msgstr "" #: ../../content/administration/maintain/domain_names.rst:3 +#: ../../content/administration/maintain/odoo_online.rst:70 msgid "Domain names" msgstr "" @@ -2158,7 +2159,7 @@ msgid ":doc:`/applications/general/email_communication/email_servers`" msgstr "" #: ../../content/administration/maintain/enterprise.rst:6 -msgid "Upgrade Community to Enterprise" +msgid "Switch from Community to Enterprise" msgstr "" #: ../../content/administration/maintain/enterprise.rst:8 @@ -2893,66 +2894,54 @@ msgid "Odoo Online database management" msgstr "" #: ../../content/administration/maintain/odoo_online.rst:5 -msgid "To manage a database, sign in to https://www.odoo.com and access the `database management page `_ by clicking on the user icon, then on :guilabel:`My Databases`." +msgid "To manage a database, go to the `database manager `_ and sign in as the database administrator." +msgstr "" + +#: ../../content/administration/maintain/odoo_online.rst:8 +msgid "All the main database management options are available by clicking the database name, except the upgrade option, which can be accessed by clicking the **arrow in a circle** icon next to the database name. It is only displayed if an upgrade is available." msgstr "" #: ../../content/administration/maintain/odoo_online.rst:-1 -msgid "Clicking on the user icon opens a drop-down menu. \"My databases\" button is highlighted." +msgid "Accessing the database management options" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:14 -msgid "Make sure to connect as the administrator of the database that changes will be made on." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:-1 -msgid "Clicking on the gear icon opens the drop-down menu." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:20 -msgid "Open the drop-down menu next to the database that changes will be made on by clicking on the gear icon." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:23 -msgid "Several actions are available:" -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:25 +#: ../../content/administration/maintain/odoo_online.rst:15 msgid ":ref:`odoo_online/upgrade`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:26 +#: ../../content/administration/maintain/odoo_online.rst:16 msgid ":ref:`odoo_online/duplicate`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:27 +#: ../../content/administration/maintain/odoo_online.rst:17 msgid ":ref:`odoo_online/rename`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:28 +#: ../../content/administration/maintain/odoo_online.rst:18 msgid ":ref:`odoo_online/download`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:29 +#: ../../content/administration/maintain/odoo_online.rst:19 msgid ":ref:`odoo_online/domains`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:30 +#: ../../content/administration/maintain/odoo_online.rst:20 msgid ":ref:`odoo_online/tags`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:31 +#: ../../content/administration/maintain/odoo_online.rst:21 msgid ":ref:`odoo_online/delete`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:32 +#: ../../content/administration/maintain/odoo_online.rst:22 msgid ":ref:`odoo_online/contact-support`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:33 +#: ../../content/administration/maintain/odoo_online.rst:23 msgid ":ref:`odoo_online/users`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:38 +#: ../../content/administration/maintain/odoo_online.rst:28 #: ../../content/administration/odoo_sh/getting_started/branches.rst:293 #: ../../content/administration/odoo_sh/getting_started/settings.rst:77 #: ../../content/administration/odoo_sh/getting_started/settings.rst:113 @@ -2960,157 +2949,133 @@ msgstr "" msgid "Upgrade" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:40 -msgid "If the database is *not* on the latest **Online version**, the administrator should receive an invitation to :doc:`upgrade <../upgrade>` the database. A :guilabel:`Rolling Release`` button on the database's main screen proposes an upgrade to the latest version (e.g., 14.0 to 16.1)." +#: ../../content/administration/maintain/odoo_online.rst:30 +msgid "Trigger a database upgrade." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:0 -msgid "**If the Odoo database's version is lower than the latest major release:**" +#: ../../content/administration/maintain/odoo_online.rst:33 +msgid "For more information about the upgrade process, check out the :doc:`Odoo Online upgrade documentation <../upgrade/odoo_online>`." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:0 -msgid "The database must be upgraded within two months. After these two months, an automatic upgrade is initiated." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:0 -msgid "**If the Odoo database's version is equal to or higher than the latest major release:**" -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:0 -msgid "Disregard the invitation to upgrade as the database probably wouldn't benefit from new features every two months." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:53 -msgid "Versions that are not supported anymore become deprecated and need to be updated to avoid security issues. Odoo recommends that the company initiate the upgrade, as this method allows for the company to request a test upgrade of the database to check for any discrepancies." -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:58 -msgid ":doc:`../upgrade`" -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:59 -msgid ":doc:`supported_versions`" -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:64 +#: ../../content/administration/maintain/odoo_online.rst:39 msgid "Duplicate" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:66 -msgid "This allows to make an exact copy of the database to be able to perform testing without compromising the daily operations." +#: ../../content/administration/maintain/odoo_online.rst:41 +msgid "Create an exact copy of the database, which can be used to perform testing without compromising daily operations." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:70 -msgid "By checking :guilabel:`For testing purposes`, all external communication (emails, payments, delivery orders, etc.) are disabled by default on the duplicated database." +#: ../../content/administration/maintain/odoo_online.rst:45 +msgid "By checking :guilabel:`For testing purposes`, all external actions (emails, payments, delivery orders, etc.) are disabled by default on the duplicated database." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:72 -msgid "Duplicate databases expire automatically after 15 days." +#: ../../content/administration/maintain/odoo_online.rst:47 +msgid "Duplicated databases expire automatically after 15 days." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:77 +#: ../../content/administration/maintain/odoo_online.rst:52 msgid "Rename" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:79 +#: ../../content/administration/maintain/odoo_online.rst:54 msgid "Rename the database and its URL." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:84 +#: ../../content/administration/maintain/odoo_online.rst:59 msgid "Download" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:86 -msgid "Instantly download a ZIP file with a backup of the database." +#: ../../content/administration/maintain/odoo_online.rst:61 +msgid "Download a ZIP file containing a backup of the database." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:89 -msgid "Databases are backed up daily according to the `Odoo Cloud SLA `_." +#: ../../content/administration/maintain/odoo_online.rst:64 +msgid "Databases are backed up daily as per the `Odoo Cloud Hosting SLA `_." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:95 -msgid "Domains" +#: ../../content/administration/maintain/odoo_online.rst:72 +msgid "Use a custom :doc:`domain name ` to access the database via another URL." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:97 -msgid "Configure custom domains to access the database via another URL." +#: ../../content/administration/maintain/odoo_online.rst:75 +msgid "You can :ref:`register a domain name for free `." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:100 -msgid ":doc:`domain_names`" -msgstr "" - -#: ../../content/administration/maintain/odoo_online.rst:105 +#: ../../content/administration/maintain/odoo_online.rst:80 msgid "Tags" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:107 -msgid "Add tags to sort your databases out. You can search the tags in the search bar." +#: ../../content/administration/maintain/odoo_online.rst:82 +msgid "Add tags to easily identify and sort your databases." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:112 +#: ../../content/administration/maintain/odoo_online.rst:85 +msgid "You can search for tags in the search bar." +msgstr "" + +#: ../../content/administration/maintain/odoo_online.rst:90 #: ../../content/administration/odoo_sh/getting_started/branches.rst:550 msgid "Delete" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:114 +#: ../../content/administration/maintain/odoo_online.rst:92 msgid "Delete a database instantly." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:117 -msgid "Deleting a database means that all data is permanently lost. The deletion is instant and for all users. It is recommended to create a backup of the database before deleting it." +#: ../../content/administration/maintain/odoo_online.rst:95 +msgid "Deleting a database means that all data is permanently lost. The deletion is instant and applies to all users. It is recommended to create a backup of the database before deleting it." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:120 -msgid "Carefully read the warning message that pops up and proceed only if the implications of deleting a database are fully understood:" +#: ../../content/administration/maintain/odoo_online.rst:98 +msgid "Carefully read the warning message and only proceed if the implications of deleting a database are fully understood." msgstr "" #: ../../content/administration/maintain/odoo_online.rst:-1 -msgid "A warning message is prompted before deleting a database." +msgid "The warning message displayed before deleting a database" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:128 +#: ../../content/administration/maintain/odoo_online.rst:105 msgid "Only an administrator can delete a database." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:129 -msgid "The database name is immediately available for a new database." +#: ../../content/administration/maintain/odoo_online.rst:106 +msgid "The database name is immediately made available to anyone." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:130 -msgid "It is not possible to delete a database if it is expired or linked to a subscription. If needed, please get in touch with `Odoo Support `_." +#: ../../content/administration/maintain/odoo_online.rst:107 +msgid "Deleting a database if it has expired or is linked to a subscription is impossible. In that case, contact `Odoo Support `_." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:136 -msgid "Contact Support" +#: ../../content/administration/maintain/odoo_online.rst:113 +msgid "Contact us" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:138 -msgid "Access the Odoo `support page `_ with your database's details already pre-filled." +#: ../../content/administration/maintain/odoo_online.rst:115 +msgid "Access the `Odoo.com support page `_ with the database's details already pre-filled." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:144 -msgid "Invite / Remove Users" +#: ../../content/administration/maintain/odoo_online.rst:121 +msgid "Invite / remove users" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:146 -msgid "To invite users, fill out the email address of the new user and click on :guilabel:`Invite`. To add multiple users, click on :guilabel:`Add more users`." +#: ../../content/administration/maintain/odoo_online.rst:123 +msgid "To invite users, fill out the new user's email address and click :guilabel:`Invite`. To add multiple users, click :guilabel:`Add more users`." msgstr "" #: ../../content/administration/maintain/odoo_online.rst:-1 -msgid "Clicking on \"Add more users\" adds additional email fields." +msgid "Inviting a user on a database" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:153 -msgid "To remove users, select the users to remove and click on :guilabel:`Remove`." +#: ../../content/administration/maintain/odoo_online.rst:129 +msgid "To remove users, select them and click :guilabel:`Remove`." msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:156 -msgid ":doc:`/applications/general/users/manage_users`" +#: ../../content/administration/maintain/odoo_online.rst:132 +msgid ":doc:`../../applications/general/users/manage_users`" msgstr "" -#: ../../content/administration/maintain/odoo_online.rst:157 -msgid ":doc:`/applications/general/users/delete_account`" +#: ../../content/administration/maintain/odoo_online.rst:133 +msgid ":doc:`../../applications/general/users/delete_account`" msgstr "" #: ../../content/administration/maintain/on_premise.rst:3 @@ -6670,44 +6635,92 @@ msgstr "" msgid "If you are using the Website or Studio app, we recommend you always do a test upgrade before upgrading your production instance." msgstr "" -#: ../../content/administration/upgrade/odoo_online.rst:6 -msgid "Requesting a test upgrade" +#: ../../content/administration/upgrade/odoo_online.rst:5 +msgid "Odoo databases can be manually upgraded directly from the main Odoo website. To upgrade an Odoo database, navigate to the `database manager `_ page and sign in." msgstr "" #: ../../content/administration/upgrade/odoo_online.rst:8 -msgid "Go to your `database manager `_" +msgid "The database manager page displays all of the Odoo databases associated with the user's account. Any databases that are not already on the most recent version of Odoo display an **arrow in a circle** icon next to the database name, indicating that the database can be upgraded." msgstr "" -#: ../../content/administration/upgrade/odoo_online.rst:9 -msgid "Click on your profile icon and select *My Databases*." +#: ../../content/administration/upgrade/odoo_online.rst:-1 +msgid "The database manager page with an upgrade button next to the name of a database." msgstr "" -#: ../../content/administration/upgrade/odoo_online.rst:0 -msgid "Selecting My Databases under my profile" -msgstr "" - -#: ../../content/administration/upgrade/odoo_online.rst:14 -msgid "Click on the up arrow button next to your main database name to proceed to the test upgrade." -msgstr "" - -#: ../../content/administration/upgrade/odoo_online.rst:0 -msgid "Selecting the action settings icon" +#: ../../content/administration/upgrade/odoo_online.rst:17 +msgid "If the database's version is **lower** than the latest major release: the database must be upgraded within two months. After these two months, an automatic upgrade is initiated." msgstr "" #: ../../content/administration/upgrade/odoo_online.rst:19 -msgid "In the pop-up message that appears, select the target version and then :guilabel:`Test` as purpose." +msgid "If the database's version is **equal** to or **higher** than the latest major release: you can disregard the invitation to upgrade, as the database probably would not benefit from new features every two months." msgstr "" #: ../../content/administration/upgrade/odoo_online.rst:23 -msgid "The :guilabel:`Production` purpose doesn't appear if you didn't test your upgraded database at least once." +msgid "If a database is *not* on the latest online version, its administrator should receive an invitation to upgrade on the database's dashboard, displayed as an **arrow in a circle**." msgstr "" -#: ../../content/administration/upgrade/odoo_online.rst:26 -msgid "This triggers the automated upgrade process. A confirmation email is then sent to you with the the link to the upgraded database or to provide information if the upgrade failed." +#: ../../content/administration/upgrade/odoo_online.rst:-1 +msgid "Invitation to upgrade on the database dashboard." msgstr "" #: ../../content/administration/upgrade/odoo_online.rst:30 -msgid "You can also see and access your test database from your *My Databases* page." +msgid "Versions that are not supported anymore become deprecated and must be updated to avoid security issues. It is recommended to initiate the upgrade yourself and not wait for the automatic upgrade, as the former method allows you to request a test upgrade of the database to check for any discrepancies." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:36 +msgid "Test database" +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:38 +msgid "Click on the **arrow in a circle** icon to start the upgrade process. On the :guilabel:`Upgrade your database` pop-up, select the version of Odoo that the platform will be upgraded to. In the :guilabel:`Email to notify` field, enter an email address that will receive email notifications about the database upgrade." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:43 +msgid "There is also a :guilabel:`Purpose` section on the pop-up that is used to specify the reason for the upgrade. However, at this stage of the process, the only selectable option is :guilabel:`Test`, as Odoo requires users to create a test copy of the upgraded database before converting the actual database." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:-1 +msgid "The \"Upgrade your database\" pop-up." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:52 +msgid "After filling out the form, click the :guilabel:`Upgrade` button. The pop-up disappears and the database being upgraded shows a red :guilabel:`Upgrade in progress` tag next to its name. An email confirming that the upgrade is in progress is also sent to the email address specified on the pop-up." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:-1 +msgid "The \"Upgrade in progress\" tag next to the database name." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:61 +msgid "Once the upgrade is complete, a new test database appears on the `database manager `_ page. To access the test database, click the drop-down arrow (:guilabel:`⯆`) to the left of the main database's name. Doing so makes the test version appear below it. Finally, click the green :guilabel:`Connect` button on the right side of the test version's row to go to the database." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:-1 +msgid "A test database on the database manager page." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:71 +msgid "Except for being on the newer version of Odoo, the test database is an exact copy of the one being upgraded. It is important to do extensive testing in this database to ensure that the upgrade has not altered or corrupted any data, and that all workflows still proceed as expected." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:76 +msgid "Production database" +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:78 +msgid "After confirming the integrity of the new version, return to the `database manager `_ page. Once again, click on the **arrow in a circle** icon next to the database being upgraded. The :guilabel:`Upgrade your database` pop-up appears as before, except that there is now a :guilabel:`Production` option under the :guilabel:`Purpose` section." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:83 +msgid "Select the :guilabel:`Production` option and then click :guilabel:`Upgrade` to begin the upgrade process. As before, a notification email is sent to the email address provided and a red :guilabel:`Upgrade in progress` tag appears next to the name of the database." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:87 +msgid "The production database is then taken offline and will be upgraded automatically. The time it takes to upgrade the production database should be similar to the time that was necessary to upgrade the test database. Make sure to inform database users of the scheduled downtime." +msgstr "" + +#: ../../content/administration/upgrade/odoo_online.rst:91 +msgid "After the upgrade is finished, the :guilabel:`Upgrade in progress` tag disappears and the database is upgraded to the version specified." msgstr "" #: ../../content/administration/upgrade/odoo_sh.rst:10 diff --git a/locale/sources/contributing.pot b/locale/sources/contributing.pot index be6b98678..1cc657c9e 100644 --- a/locale/sources/contributing.pot +++ b/locale/sources/contributing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo saas-16.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-03 06:55+0000\n" +"POT-Creation-Date: 2023-07-10 08:34+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/sources/developer.pot b/locale/sources/developer.pot new file mode 100644 index 000000000..288fa4bc4 --- /dev/null +++ b/locale/sources/developer.pot @@ -0,0 +1,34065 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Odoo S.A. +# This file is distributed under the same license as the Odoo package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Odoo saas-16.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-10 08:34+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../content/developer.rst:9 +msgid "Developer" +msgstr "" + +#: ../../content/developer.rst:11 +msgid "Learn through tutorials and get help using reference guides." +msgstr "" + +#: ../../content/developer/glossary.rst:5 +msgid "Glossary" +msgstr "" + +#: ../../content/developer/glossary.rst:8 +msgid "external id" +msgstr "" + +#: ../../content/developer/glossary.rst:9 +msgid "external identifier" +msgstr "" + +#: ../../content/developer/glossary.rst:10 +msgid "external identifiers" +msgstr "" + +#: ../../content/developer/glossary.rst:12 +msgid "string identifier stored in ``ir.model.data``, can be used to refer to a record regardless of its database identifier during data imports or export/import roundtrips." +msgstr "" + +#: ../../content/developer/glossary.rst:16 +msgid "External identifiers are in the form :samp:`{module}.{id}` (e.g. ``account.invoice_graph``). From within a module, the :samp:`{module}.` prefix can be left out." +msgstr "" + +#: ../../content/developer/glossary.rst:20 +msgid "Sometimes referred to as \"xml id\" or ``xml_id`` as XML-based :ref:`reference/data` make extensive use of them." +msgstr "" + +#: ../../content/developer/glossary.rst:22 +msgid "format string" +msgstr "" + +#: ../../content/developer/glossary.rst:24 +msgid "inspired by `jinja variables`_, format strings allow more easily mixing literal content and computed content (expressions): content between ``{{`` and ``}}`` is interpreted as an expression and evaluated, other content is interpreted as literal strings and displayed as-is" +msgstr "" + +#: ../../content/developer/glossary.rst:29 +msgid "GIS" +msgstr "" + +#: ../../content/developer/glossary.rst:30 +msgid "Geographic Information System" +msgstr "" + +#: ../../content/developer/glossary.rst:32 +msgid "any computer system or subsystem to capture, store, manipulate, analyze, manage or present spatial and geographical data." +msgstr "" + +#: ../../content/developer/glossary.rst:34 +msgid "minified" +msgstr "" + +#: ../../content/developer/glossary.rst:35 +msgid "minification" +msgstr "" + +#: ../../content/developer/glossary.rst:37 +msgid "process of removing extraneous/non-necessary sections of files (comments, whitespace) and possibly recompiling them using equivalent but shorter structures (`ternary operator`_ instead of ``if/else``) in order to reduce network traffic" +msgstr "" + +#: ../../content/developer/howtos.rst:6 +msgid "How-to guides" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:4 +msgid "Accounting localization" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:8 +msgid "This tutorial requires knowledge about how to build a module in Odoo (see :doc:`../tutorials/getting_started`)." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:13 +msgid "Installation procedure" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:15 +msgid "On installing the `account `_ module, the localization module corresponding to the country code of the company is installed automatically. In case of no country code set or no localization module found, the `l10n_generic_coa `_ (US) localization module is installed by default. Check `post init hook `_ for details." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:19 +msgid "For example, `l10n_ch `_ will be installed if the company has ``Switzerland`` as country." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:22 +msgid "Building a localization module" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:24 +msgid "The structure of a basic ``l10n_XX`` module may be described with the following :file:`__manifest__.py` file:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:63 +msgid "In the first file :file:`data/account_chart_template_data.xml`, we set the name for the chart of accounts along with some basic fields." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:66 +msgid ":ref:`Chart Template References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:69 +msgid "`addons/l10n_ch/data/l10n_ch_chart_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:80 +msgid "Recommended **xmlid** for the record is `chart_template`. If you need many chart of accounts, you can add some suffixes, i.e. `chart_template_XXX`." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:85 +msgid "Chart of Accounts" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:88 +msgid "Account tags" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:91 +msgid ":ref:`Account Tag References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:93 +msgid "Tags are a way to sort accounts. For example, imagine you want to create a financial report having multiple lines but you have no way to find a rule to dispatch the accounts according to their ``code``. The solution is the usage of tags, one for each report line, to filter accounts like you want." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:97 +msgid "Put the tags in the :file:`data/account_account_tag_data.xml` file." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:100 +msgid "`addons/l10n_lt/data/account.account.template.csv `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:108 +#: ../../content/developer/howtos/accounting_localization.rst:138 +msgid "`addons/l10n_at/data/account_account_template.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:119 +msgid "Accounts" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:122 +msgid ":ref:`Account References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:123 +msgid ":doc:`/applications/finance/accounting/get_started/chart_of_accounts`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:125 +msgid "Obviously, :guilabel:`Chart of Accounts` cannot exist without :guilabel:`Accounts`. You need to specify them in :file:`data/account.account.template.csv`." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:128 +msgid "`addons/l10n_ch/data/account.account.template.csv `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:135 +msgid "CSV is prefered but you may use XML format instead." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:148 +msgid "Avoid the usage of liquidity ``account.account.type``! Indeed, the bank & cash accounts are created directly at the installation of the localization module and then, are linked to an ``account.journal``." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:150 +msgid "Only one account of type payable/receivable is enough for the generic case. We need to define a PoS receivable account as well however. (linked in the CoA)" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:151 +msgid "Don't create too many accounts: 200-300 is enough. But mostly, we try to find a good balance where the CoA needs minimal adapting for most companies afterwards." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:153 +msgid "Next settings for the chart of accounts are set in a separate file, because we need to provide a :ref:`list of accounts ` first. In :file:`data/account_chart_post_data.xml`, we set some default accounts:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:158 +msgid "`addons/l10n_ch/data/l10n_ch_chart_post_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:168 +msgid "Account groups" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:171 +msgid ":ref:`Account Group References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:173 +msgid "Account groups allow describing the hierarchical structure of the chart of accounts. The filter needs to be activated in the report and then when you decollapse into journal entries it will show the parents of the account." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:175 +msgid "It works with the prefix *start*/*end*, so every account where the code starts with something between *start* and *end* will have this account.group as the parent group. Furthermore, the account groups can have a parent account group as well to form the hierarchy." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:179 +msgid "`addons/l10n_il/data/account.group.template.csv `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:188 +#: ../../content/developer/reference/standard_modules/account/account_tax.rst:5 +msgid "Taxes" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:191 +msgid ":ref:`Tax References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:192 +msgid ":doc:`/applications/finance/accounting/taxes/`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:194 +msgid "To add taxes you first need to specify tax groups. You normally need just one tax group for every tax rate, except for the 0% as you need to often distinguish between exempt, 0%, not subject, ... taxes. This model only has two required fields: *name* and *country*. Create the file :file:`data/account_tax_group_data.xml` and list the groups:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:211 +msgid "`addons/l10n_ch/data/account_tax_group_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:220 +msgid "`addons/l10n_uk/data/account.tax.group.csv `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:227 +msgid "Now you can add the taxes via :file:`data/account_tax_template_data.xml` file. The first tax you define that is purchase/sale also becomes the default purchase/sale tax for your products." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:231 +msgid "`addons/l10n_ae/data/account_tax_template_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:239 +msgid "If some accounts should use default taxes, you can set them up in :file:`data/account_account_template_post_data.xml`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:242 +msgid "Tax Report" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:248 +msgid "The tax report is declared in the :guilabel:`Invoicing` (`account`) app, but the report is only accessible when :guilabel:`Accounting` (`account_accountant`) is installed." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:251 +#: ../../content/developer/howtos/accounting_localization.rst:376 +msgid ":doc:`/developer/reference/standard_modules/account/account_report_line`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:252 +msgid ":doc:`/applications/finance/accounting/reporting/tax_returns`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:254 +msgid "In the previous section, you noticed the fields `invoice_repartition_line_ids` or `refund_repartition_line_ids` and probably understood nothing about them. Good news: you are not alone on this incomprehension. Bad news: you have to figure it out a bit. The topic is complicated. Indeed:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:259 +msgid "The simple version is that, in the tax template, you indicate in the invoice/refund repartition lines whether the base or a percentage of the tax needs to be reported in which report line (through the *minus/plus_report_line_ids* fields). It becomes clear also when you check the tax configuration in the Odoo interface (or check the docs :ref:`Tax References `, :ref:`Tax Repartition References `)." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:262 +msgid "So, once you have properly configured taxes, you just need to add the :file:`data/account_tax_report_data.xml` file with a record for your `account.report`. For it to be considered as a tax report, you need to provide it with the right `root_report_id`." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:276 +msgid "... followed by the declaration of its lines, as `account.report.line` records." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:279 +msgid "`addons/l10n_au/data/account_tax_report_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:290 +msgid "Fiscal positions" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:293 +msgid ":ref:`Fiscal Position References `" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:294 +msgid ":doc:`/applications/finance/accounting/taxes/fiscal_positions`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:296 +msgid "Specify fiscal positions in the :file:`data/account_fiscal_position_template_data.xml` file." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:299 +msgid "`addons/l10n_es/data/account_fiscal_position_template_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:308 +msgid "Final steps" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:310 +msgid "The last step when installing a localization module is to try to apply its chart of accounts to the current company (if it does not already have one). The file :file:`data/account_chart_template_try_loading.xml` is responsible for that." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:314 +msgid "`addons/l10n_ch/data/account_chart_template_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:322 +msgid "Finally, you may add a demo company, so the localization can easily be tested in demo mode." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:325 +msgid "`addons/l10n_ch/demo/demo_company.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:334 +msgid "Accounting reports" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:341 +msgid ":doc:`/applications/finance/accounting/reporting`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:343 +msgid "Accounting reports should be added via a separate module `l10n_XX_reports` that should go to the `enterprise repository `_." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:345 +msgid "Basic :file:`__manifest__.py` file for such a module looks as following:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:366 +msgid "Functional overview of financial reports is here: :doc:`/applications/finance/accounting/reporting`." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:368 +msgid "Some good examples:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:370 +msgid "`l10n_ch_reports/data/account_financial_html_report_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:371 +msgid "`l10n_be_reports/data/account_financial_html_report_data.xml `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:373 +msgid "You can check the meaning of the fields here:" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:375 +msgid ":doc:`/developer/reference/standard_modules/account/account_report`" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:378 +msgid "If you gave a `root_report_id` to your report, it is now available in its variant selector. If not, you still need to add a menu item for it. A default menu item can be created from the form view of the report by clicking on :menuselection:`Actions --> Create Menu Item`. You will then need to refresh the page to see it. Alternatively, to create a dedicated section for a totally new report in the :guilabel:`Reporting` menu, you need to create a new `ir.ui.menu` record (usually in the main `l10n_XX` module) and a new `ir.actions.client` (usually in the new report XML file) that calls the `account.report` with the new **report id**. Then, set the new menu as `parent_id` field in the action model." +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:388 +msgid "`ir.ui.menu creation `_" +msgstr "" + +#: ../../content/developer/howtos/accounting_localization.rst:389 +msgid "`ir.actions.client and menu item creation `_" +msgstr "" + +#: ../../content/developer/howtos/company.rst:6 +msgid "Multi-company Guidelines" +msgstr "" + +#: ../../content/developer/howtos/company.rst:10 +msgid "This tutorial requires good knowledge of Odoo. Please refer to the :doc:`../tutorials/getting_started` tutorial first if needed." +msgstr "" + +#: ../../content/developer/howtos/company.rst:13 +msgid "As of version 13.0, a user can be logged in to multiple companies at once. This allows the user to access information from multiple companies, but also to create/edit records in a multi-company environment." +msgstr "" + +#: ../../content/developer/howtos/company.rst:17 +msgid "If not managed correctly, it may be the source of a lot of inconsistent multi-company behaviors. For instance, a user logged in to both companies A and B could create a sales order in company A and add products belonging to company B to it. It is only when the user logs out from company B that access errors will occur for the sales order." +msgstr "" + +#: ../../content/developer/howtos/company.rst:22 +msgid "To correctly manage multi-company behaviors, Odoo's ORM provides multiple features:" +msgstr "" + +#: ../../content/developer/howtos/company.rst:24 +msgid ":ref:`Company-dependent fields `" +msgstr "" + +#: ../../content/developer/howtos/company.rst:25 +msgid ":ref:`Multi-company consistency `" +msgstr "" + +#: ../../content/developer/howtos/company.rst:26 +msgid ":ref:`Default company `" +msgstr "" + +#: ../../content/developer/howtos/company.rst:27 +msgid ":ref:`Views `" +msgstr "" + +#: ../../content/developer/howtos/company.rst:28 +msgid ":ref:`Security rules `" +msgstr "" + +#: ../../content/developer/howtos/company.rst:33 +msgid "Company-dependent fields" +msgstr "" + +#: ../../content/developer/howtos/company.rst:35 +msgid "When a record is available from multiple companies, we must expect that different values will be assigned to a given field depending on the company from which the value is set." +msgstr "" + +#: ../../content/developer/howtos/company.rst:38 +msgid "For the field of the same record to support several values, it must be defined with the attribute `company_dependent` set to `True`." +msgstr "" + +#: ../../content/developer/howtos/company.rst:57 +msgid "The `_compute_display_info` method is decorated with `depends_context('company')` (see :attr:`~odoo.api.depends_context`) to ensure that the computed field is recomputed depending on the current company (`self.env.company`)." +msgstr "" + +#: ../../content/developer/howtos/company.rst:61 +msgid "When a company-dependent field is read, the current company is used to retrieve its value. In other words, if a user is logged in to companies A and B with A as the main company and creates a record for company B, the value of company-dependent fields will be that of company A." +msgstr "" + +#: ../../content/developer/howtos/company.rst:65 +msgid "To read the values of company-dependent fields set by another company than the current one, we need to ensure the company we are using is the correct one. This can be done with :meth:`~odoo.models.Model.with_company`, which updates the current company." +msgstr "" + +#: ../../content/developer/howtos/company.rst:80 +msgid "Whenever you are computing/creating/... things that may behave differently in different companies, you should make sure whatever you are doing is done in the right company. It doesn't cost much to always use `with_company` to avoid problems later." +msgstr "" + +#: ../../content/developer/howtos/company.rst:101 +msgid "Multi-company consistency" +msgstr "" + +#: ../../content/developer/howtos/company.rst:103 +msgid "When a record is made shareable between several companies by the means of a `company_id` field, we must take care that it cannot be linked to the record of another company through a relational field. For instance, we do not want to have a sales order and its invoice belonging to different companies." +msgstr "" + +#: ../../content/developer/howtos/company.rst:107 +msgid "To ensure this multi-company consistency, you must:" +msgstr "" + +#: ../../content/developer/howtos/company.rst:109 +msgid "Set the class attribute `_check_company_auto` to `True`." +msgstr "" + +#: ../../content/developer/howtos/company.rst:110 +msgid "Define relational fields with the attribute `check_company` set to `True` if their model has a `company_id` field." +msgstr "" + +#: ../../content/developer/howtos/company.rst:113 +msgid "On each :meth:`~odoo.models.Model.create` and :meth:`~odoo.models.Model.write`, automatic checks will be triggered to ensure the multi-company consistency of the record." +msgstr "" + +#: ../../content/developer/howtos/company.rst:127 +msgid "The field `company_id` must not be defined with `check_company=True`." +msgstr "" + +#: ../../content/developer/howtos/company.rst:132 +msgid "The `check_company` feature performs a strict check! It means that if a record has no `company_id` (i.e., the field is not required), it cannot be linked to a record whose `company_id` is set." +msgstr "" + +#: ../../content/developer/howtos/company.rst:138 +msgid "When no domain is defined on the field and `check_company` is set to `True`, a default domain is added: `['|', '('company_id', '=', False), ('company_id', '=', company_id)]`" +msgstr "" + +#: ../../content/developer/howtos/company.rst:144 +msgid "Default company" +msgstr "" + +#: ../../content/developer/howtos/company.rst:146 +msgid "When the field `company_id` is made required on a model, a good practice is to set a default company. It eases the setup flow for the user or even guarantees its validity when the company is hidden from view. Indeed, the company is usually hidden if the user does not have access to multiple companies (i.e., when the user does not have the group `base.group_multi_company`)." +msgstr "" + +#: ../../content/developer/howtos/company.rst:168 +#: ../../content/developer/howtos/website_themes/setup.rst:74 +#: ../../content/developer/howtos/website_themes/theming.rst:496 +#: ../../content/developer/reference/backend/views.rst:6 +#: ../../content/developer/reference/frontend/javascript_reference.rst:1196 +msgid "Views" +msgstr "" + +#: ../../content/developer/howtos/company.rst:170 +msgid "As stated in :ref:`above `, the company is usually hidden from view if the user does not have access to multiple companies. This is assessed with the group `base.group_multi_company`." +msgstr "" + +#: ../../content/developer/howtos/company.rst:197 +msgid "Security rules" +msgstr "" + +#: ../../content/developer/howtos/company.rst:199 +msgid "When working with records shared across companies or restricted to a single company, we must take care that a user does not have access to records belonging to other companies." +msgstr "" + +#: ../../content/developer/howtos/company.rst:202 +msgid "This is achieved with security rules based on `company_ids`, which contain the current companies of the user (the companies the user checked in the multi-company widget)." +msgstr "" + +#: ../../content/developer/howtos/company.rst:229 +#: ../../content/developer/howtos/provide_iap_services.rst:118 +#: ../../content/developer/howtos/provide_iap_services.rst:222 +#: ../../content/developer/howtos/provide_iap_services.rst:406 +#: ../../content/developer/howtos/provide_iap_services.rst:408 +#: ../../content/developer/howtos/provide_iap_services.rst:511 +#: ../../content/developer/howtos/translations.rst:19 +#: ../../content/developer/howtos/website_themes/building_blocks.rst:77 +#: ../../content/developer/howtos/website_themes/building_blocks.rst:332 +#: ../../content/developer/howtos/website_themes/layout.rst:547 +#: ../../content/developer/howtos/website_themes/pages.rst:130 +#: ../../content/developer/howtos/website_themes/pages.rst:194 +#: ../../content/developer/howtos/website_themes/shapes.rst:125 +#: ../../content/developer/reference/backend/actions.rst:176 +#: ../../content/developer/reference/backend/orm.rst:636 +#: ../../content/developer/reference/backend/orm.rst:638 +#: ../../content/developer/reference/backend/orm.rst:827 +#: ../../content/developer/reference/backend/orm.rst:980 +#: ../../content/developer/reference/backend/security.rst:28 +#: ../../content/developer/reference/backend/security.rst:186 +#: ../../content/developer/reference/backend/views.rst:13 +#: ../../content/developer/reference/backend/views.rst:70 +#: ../../content/developer/reference/backend/views.rst:81 +#: ../../content/developer/reference/backend/views.rst:179 +#: ../../content/developer/reference/backend/views.rst:241 +#: ../../content/developer/reference/backend/views.rst:683 +#: ../../content/developer/reference/backend/views.rst:807 +#: ../../content/developer/reference/backend/views.rst:809 +#: ../../content/developer/reference/backend/views.rst:1500 +#: ../../content/developer/reference/backend/views.rst:1600 +#: ../../content/developer/reference/backend/views.rst:1618 +#: ../../content/developer/reference/backend/views.rst:1756 +#: ../../content/developer/reference/frontend/qweb.rst:412 +#: ../../content/developer/reference/frontend/qweb.rst:413 +#: ../../content/developer/reference/frontend/qweb.rst:475 +#: ../../content/developer/reference/frontend/qweb.rst:792 +#: ../../content/developer/tutorials/master_odoo_web_framework/03_custom_kanban_view.rst:5 +#: ../../content/developer/tutorials/web.rst:134 +#: ../../content/developer/tutorials/web.rst:1872 +#: ../../content/developer/tutorials/website.rst:495 +msgid "Todo" +msgstr "" + +#: ../../content/developer/howtos/company.rst:229 +msgid "check_company on company_dependent fields." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:3 +msgid "Connect with a device" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:5 +msgid "IoT Drivers allow any Odoo module to communicate in real-time with any device connected to the IoT Box. Communication with the IoT Box goes both ways, so the Odoo client can send commands to and receive information from any of the supported devices." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:10 +msgid "To add support for a device, all we need is:" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:12 +msgid "an `Interface`, to detect connected devices of a specific type" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:13 +msgid "a `Driver`, to communicate with an individual device" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:15 +msgid "At each boot, the IoT Box will load all of the Interfaces and Drivers that can be located on the connected Odoo instance. Each module can contain an `iot_handlers` directory that will be copied to the IoT Box. The structure of this directory is the following" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:34 +msgid "Detect Devices" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:36 +msgid "Devices connected to the IoT Box are detected through `Interfaces`. There is an Interface for each supported connection type (USB, Bluetooth, Video, Printers, Serial, etc.). The interface maintains a list of detected devices and associates them with the right Driver." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:41 +msgid "Supported devices will appear both on the IoT Box Homepage that you can access through its IP address and in the IoT module of the connected Odoo instance." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:45 +msgid "Interface" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:47 +msgid "The role of the Interface is to maintain a list of devices connected through a determined connection type. Creating a new interface requires" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:50 +msgid "Extending the `Interface` class" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:51 +msgid "Setting the `connection_type` class attribute" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:52 +msgid "Implementing the `get_devices` method, that should return a dictionary containing data about each detected device. This data will be given as argument to the constructors and `supported` method of the Drivers." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:57 +msgid "Setting the `_loop_delay` attribute will modify the interval between calls to `get_devices`. By default, this interval is set to 3 seconds." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:74 +msgid "Driver" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:76 +msgid "Once the interface has retrieved the list of detected devices, it will loop through all of the Drivers that have the same `connection_type` attribute and test their respective `supported` method on all detected devices. If the supported method of a Driver returns `True`, an instance of this Driver will be created for the corresponding device." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:83 +msgid "`supported` methods of drivers are given a priority order. The `supported` method of a child class will always be tested before the one of its parent. This priority can be adjusted by modifying the `priority` attribute of the Driver." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:88 +msgid "Creating a new Driver requires:" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:90 +msgid "Extending `Driver`" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:91 +msgid "Setting the `connection_type` class attribute." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:92 +msgid "Setting the `device_type`, `device_connection` and `device_name` attributes." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:93 +msgid "Defining the `supported` method" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:113 +msgid "Communicate With Devices" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:115 +msgid "Once your new device is detected and appears in the IoT module, the next step is to communicate with it. Since the box only has a local IP address, it can only be reached from the same local network. Communication, therefore, needs to happen on the browser-side, in JavaScript." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:120 +msgid "The process depends on the direction of the communication: - From the browser to the box, through `Actions`_ - From the box to the browser, through `Longpolling`_" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:124 +msgid "Both channels are accessed from the same JS object, the `DeviceProxy`, which is instantiated using the IP of the IoT Box and the device identifier." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:137 +#: ../../content/developer/howtos/website_themes/forms.rst:33 +#: ../../content/developer/reference/backend/actions.rst:6 +#: ../../content/developer/tutorials/getting_started/06_firstui.rst:47 +msgid "Actions" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:139 +msgid "Actions are used to tell a selected device to execute a specific action, such as taking a picture, printing a receipt, etc." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:143 +msgid "It must be noted that no “answer” will be sent by the box on this route, only the request status. The answer to the action, if any, has to be retrieved via the longpolling." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:147 +msgid "An action can be performed on the DeviceProxy Object." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:153 +msgid "In your driver, define an `action` method that will be executed when called from an Odoo module. It takes the data given during the call as argument." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:162 +msgid "Longpolling" +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:164 +msgid "When any module in Odoo wants to read data from a specific device, it creates a listener identified by the IP/domain of the box and the device identifier and passes it a callback function to be called every time the device status changes. The callback is called with the new data as argument." +msgstr "" + +#: ../../content/developer/howtos/connect_device.rst:177 +msgid "In the Driver, an event is released by calling the `device_changed` function from the `event_manager`. All callbacks set on the listener will then be called with `self.data` as argument." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:3 +msgid "Create customized reports" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:5 +msgid "SQL views are a technique for creating customized reports to show data that cannot be shown with existing models' fields and views. In other words, this technique helps avoid unnecessary creation and calculation of additional fields solely for data analysis purposes." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:11 +msgid "Create a model" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:13 +msgid "A SQL view is created in a similar manner as a standard model:" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:26 +msgid "Where the attributes:" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:28 +msgid "`_auto = False` indicates that we do not want to store the model in the database" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:29 +msgid "`_rec_name` indicates which of the model's fields represents a record's name (i.e. the name that will be used in the navigation breadcrumb when opening a record's form view)" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:32 +msgid "and its fields are defined in the same way as a standard model, except every field is marked as `readonly=True`." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:36 +msgid "Don't forget to add your new model to your security file." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:39 +msgid "Populate the model" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:41 +msgid "There are 2 ways to populate a SQL view's table:" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:43 +msgid "override the `BaseModel.init()` method," +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:44 +msgid "set the `_table_query` property." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:46 +msgid "Regardless of which way is used, a SQL query will be executed to populate the model. Therefore, any SQL commands can be used to collect and/or calculate the data needed and you are expected to keep in mind that you are bypassing the ORM (i.e. it is a good idea to read through :ref:`reference/security` if you haven't already). The columns returned from the `SELECT` will populate the model's fields, so ensure that your column names match your field names, or use alias names that match." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:55 +msgid "Overriding `BaseModel.init()`" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:57 +msgid "In most cases, overriding the `BaseModel.init()` method is the standard and better option to use. It requires the import of `tools` and is typically written as follows:" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:71 +msgid "`tools.drop_view_if_exists` ensures that a conflicting view is not created when the SQL query is executed. It is standard to separate the different parts of the query to allow for easier model extension. Exactly how the query is split up across methods is not standardized, but at minimum, the `_select` and `_from` methods are common, and of course, all these methods will return strings." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:78 +msgid "`Example: a SQL view using an override of BaseModel.init() `_" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:81 +msgid "Using `_table_query`" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:83 +msgid "The ``_table_query`` property is used when the view depends on the context. It is typically written as follows:" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:92 +msgid "and follows the same `_select` and `_from` methods standards as `BaseModel.init()`." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:94 +msgid "An example of when the property should be used instead of overriding `BaseModel.init()` is in a multi-company and multi-currency environment where currency related amounts need to be converted using currency exchange rates when the user switches between companies." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:99 +msgid "`Example: a SQL view using _table_query `_" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:103 +msgid "Use the model" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:105 +msgid "Views and menu items for your SQL views are created and used in the same way as any other Odoo model. You are all set to start using your SQL view. Have fun!" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:109 +msgid "Extra tips" +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:112 +msgid "A common mistake in SQL views is not considering the duplication of certain data due to table JOINs. This can lead to miscounting when using a field's `group_operator` and/or the pivot view. It is best to test your SQL view with sufficient data to ensure the resulting field values are as you expect." +msgstr "" + +#: ../../content/developer/howtos/create_reports.rst:118 +msgid "If you have a field that you do not want as a measure (i.e., in your pivot or graph views), add `store=False` to it, and it will not show." +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:4 +msgid "Create a client action" +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:6 +msgid "A client action triggers an action that is entirely implemented in the client side. One of the benefits of using a client action is the ability to create highly customized interfaces with ease. A client action is typically defined by an OWL component; we can also use the web framework and use services, core components, hooks,..." +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:11 +msgid "Create the :ref:`client action `, don't forget to make it accessible." +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:21 +msgid "Create a component that represents the client action." +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:23 +msgid ":file:`my_client_action.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_client_action.rst:38 +msgid ":file:`my_client_action.xml`" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:4 +msgid "Customize a field" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:7 +msgid "Subclass an existing field component" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:9 +msgid "Let's take an example where we want to extends the `BooleanField` to create a boolean field displaying \"Late!\" in red whenever the checkbox is checked." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:12 +msgid "Create a new widget component extending the desired field component." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:14 +#: ../../content/developer/howtos/javascript_field.rst:45 +msgid ":file:`late_order_boolean_field.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:26 +msgid "Create the field template." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:28 +msgid "The component uses a new template with the name `my_module.LateOrderBooleanField`. Create it by inheriting the current template of the `BooleanField`." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:31 +msgid ":file:`late_order_boolean_field.xml`" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:43 +msgid "Register the component to the fields registry." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:50 +#: ../../content/developer/howtos/javascript_field.rst:103 +msgid "Add the widget in the view arch as an attribute of the field." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:57 +msgid "Create a new field component" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:59 +msgid "Assume that we want to create a field that displays a simple text in red." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:61 +msgid "Create a new Owl component representing our new field" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:63 +#: ../../content/developer/howtos/javascript_field.rst:96 +msgid ":file:`my_text_field.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:90 +msgid "The imported `standardFieldProps` contains the standard props passed by the `View` such as the `update` function to update the value, the `type` of the field in the model, the `readonly` boolean, and others." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:94 +msgid "In the same file, register the component to the fields registry." +msgstr "" + +#: ../../content/developer/howtos/javascript_field.rst:101 +msgid "This maps the widget name in the arch to its actual component." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:3 +msgid "Customize a view type" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:6 +msgid "Subclass an existing view" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:8 +msgid "Assume we need to create a custom version of a generic view. For example, a kanban view with some extra ribbon-like widget on top (to display some specific custom information). In that case, this can be done in a few steps:" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:12 +msgid "Extend the kanban controller/renderer/model and register it in the view registry." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:14 +msgid ":file:`custom_kanban_controller.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:39 +msgid "In our custom kanban, we defined a new template. We can either inherit the kanban controller template and add our template pieces or we can define a completely new template." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:42 +msgid ":file:`custom_kanban_controller.xml`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:56 +msgid "Use the view with the `js_class` attribute in arch." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:68 +msgid "The possibilities for extending views are endless. While we have only extended the controller here, you can also extend the renderer to add new buttons, modify how records are presented, or customize the dropdown, as well as extend other components such as the model and `buttonTemplate`." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:73 +msgid "Create a new view from scratch" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:75 +msgid "Creating a new view is an advanced topic. This guide highlight only the essential steps." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:77 +msgid "Create the controller." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:79 +msgid "The primary role of a controller is to facilitate the coordination between various components of a view, such as the Renderer, Model, and Layout." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:82 +msgid ":file:`beautiful_controller.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:116 +msgid "The template of the Controller displays the control panel with Layout and also the renderer." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:119 +msgid ":file:`beautiful_controller.xml`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:131 +msgid "Create the renderer." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:133 +msgid "The primary function of a renderer is to generate a visual representation of data by rendering the view that includes records." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:136 +msgid ":file:`beautiful_renderer.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:144 +msgid ":file:`beautiful_renderer.xml`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:157 +msgid "Create the model." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:159 +msgid "The role of the model is to retrieve and manage all the necessary data in the view." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:161 +msgid ":file:`beautiful_model.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:192 +msgid "For advanced cases, instead of creating a model from scratch, it is also possible to use `RelationalModel`, which is used by other views." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:195 +msgid "Create the arch parser." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:197 +msgid "The role of the arch parser is to parse the arch view so the view has access to the information." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:199 +msgid ":file:`beautiful_arch_parser.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:216 +msgid "Create the view and combine all the pieces together, then register the view in the views registry." +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:219 +msgid ":file:`beautiful_view.js`" +msgstr "" + +#: ../../content/developer/howtos/javascript_view.rst:256 +msgid "Use the view in an arch." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:3 +msgid "Provide IAP services" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:5 +msgid "In-App Purchase (IAP) allows providers of ongoing services through Odoo apps to be compensated for ongoing service use rather than — and possibly instead of — a sole initial purchase." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:9 +msgid "In that context, Odoo acts mostly as a *broker* between a client and an Odoo App Developer:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:12 +msgid "Users purchase service tokens from Odoo." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:13 +msgid "Service providers draw tokens from the user's Odoo account when service is requested." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:18 +msgid "This document is intended for *service providers* and presents the latter, which can be done either via direct JSON-RPC2_ or if you are using Odoo using the convenience helpers it provides." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:23 +#: ../../content/developer/reference/extract_api.rst:22 +#: ../../content/developer/reference/frontend/javascript_reference.rst:17 +#: ../../content/developer/reference/frontend/services.rst:144 +#: ../../content/developer/reference/frontend/services.rst:182 +#: ../../content/developer/reference/frontend/services.rst:362 +#: ../../content/developer/reference/frontend/services.rst:408 +#: ../../content/developer/reference/frontend/services.rst:522 +#: ../../content/developer/reference/frontend/services.rst:612 +#: ../../content/developer/reference/frontend/services.rst:708 +#: ../../content/developer/reference/frontend/services.rst:759 +#: ../../content/developer/reference/frontend/services.rst:834 +#: ../../content/developer/reference/user_interface/scss_inheritance.rst:6 +msgid "Overview" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:28 +msgid "The Players" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:30 +msgid "The Service Provider is (probably) you the reader, you will be providing value to the client in the form of a service paid per-use." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:32 +msgid "The Client installed your Odoo App, and from there will request services." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:33 +msgid "Odoo brokers crediting, the Client adds credit to their account, and you can draw credits from there to provide services." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:35 +msgid "The External Service is an optional player: *you* can either provide a service directly, or you can delegate the actual service acting as a bridge/translator between an Odoo system and the actual service." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:43 +msgid "The Credits" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:45 +msgid "The credits went from integer to float value starting **October 2018**. Integer values are still supported." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:48 +msgid "Every service provided through the IAP platform can be used by the clients with tokens or *credits*. The credits are an float unit and their monetary value depends on the service and is decided by the provider. This could be:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:53 +msgid "for an sms service: 1 credit = 1 sms;" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:54 +msgid "for an ad service: 1 credit = 1 ad; or" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:55 +msgid "for a postage service: 1 credit = 1 post stamp." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:57 +msgid "A credit can also simply be associated with a fixed amount of money to palliate the variations of price (e.g. the prices of sms and stamps may vary following the countries)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:61 +msgid "The value of the credits is fixed with the help of prepaid credit packs that the clients can buy on https://iap.odoo.com (see :ref:`Packs `)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:64 +msgid "In the following explanations we will ignore the External Service, they are just a detail of the service you provide." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:70 +msgid "'Normal' service flow" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:72 +msgid "If everything goes well, the normal flow is the following:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:74 +msgid "The Client requests a service of some sort." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:75 +msgid "The Service Provider asks Odoo if there are enough credits for the service in the Client's account, and creates a transaction over that amount." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:78 +msgid "The Service Provider provides the service (either on their own or calling to External Services)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:80 +msgid "The Service Provider goes back to Odoo to capture (if the service could be provided) or cancel (if the service could not be provided) the transaction created at step 2." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:83 +msgid "Finally, the Service Provider notifies the Client that the service has been rendered, possibly (depending on the service) displaying or storing its results in the client's system." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:90 +msgid "Insufficient credits" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:92 +msgid "However, if the Client's account lacks credits for the service, the flow will be as follows:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:94 +msgid "The Client requests a service as previously." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:95 +msgid "The Service Provider asks Odoo if there are enough credits on the Client's account and gets a negative reply." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:97 +msgid "This is signaled back to the Client." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:98 +msgid "Who is redirected to their Odoo account to credit it and re-try." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:102 +msgid "Building your service" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:104 +msgid "For this example, the service we will provide is ~~mining dogecoins~~ burning 10 seconds of CPU for a credit. For your own services, you could, for example:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:107 +msgid "provide an online service yourself (e.g. convert quotations to faxes for business in Japan);" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:109 +msgid "provide an *offline* service yourself (e.g. provide accountancy service); or" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:110 +msgid "act as intermediary to an other service provider (e.g. bridge to an MMS gateway)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:116 +msgid "Register the service on Odoo" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:118 +msgid "complete this part with screenshots" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:120 +msgid "The first step is to register your service on the IAP endpoint (production and/or test) before you can actually query user accounts. To create a service, go to your *Portal Account* on the IAP endpoint (https://iap.odoo.com for production, https://iap-sandbox.odoo.com for testing, the endpoints are *independent* and *not synchronized*). Alternatively, you can go to your portal on Odoo (https://iap.odoo.com/my/home) and select *In-App Services*." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:129 +msgid "On production, there is a manual validation step before the service can be used to manage real transactions. This step is automatically passed when on sandbox to ease the tests." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:133 +msgid "Log in then go to :menuselection:`My Account --> Your In-App Services`, click Create and provide the information of your service." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:137 +msgid "The service has *seven* important fields:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:139 +msgid ":samp:`name` - :class:`ServiceName`: This is the string you will need to provide inside the client's :ref:`app ` when requesting a transaction from Odoo. (e.g. `self.env['iap.account].get(name)`). As good practice, this should match the technical name of your app." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:144 +msgid ":samp:`label` - :class:`Label`: The name displayed on the shopping portal for the client." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:149 +msgid "Both the :class:`ServiceName` and :class:`Label` are unique. As good practice, the :class:`ServiceName` should usually match the name of your Odoo Client App." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:152 +msgid ":samp:`icon` - :class:`Icon`: A generic icon that will serve as default for your :ref:`packs `." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:155 +msgid ":samp:`key` - :class:`ServiceKey`: The developer key that identifies you in IAP (see :ref:`your service `) and allows to draw credits from the client's account. It will be shown only once upon creation of the service and can be regenerated at will." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:161 +msgid "Your :class:`ServiceKey` *is a secret*, leaking your service key allows other application developers to draw credits bought for your service(s)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:165 +msgid ":samp:`trial credits` - :class:`Float`: This corresponds to the credits you are ready to offer upon first use to your app users. Note that such service will only be available to clients that have an active enterprise contract." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:169 +msgid ":samp:`privacy policy` - :class:`PrivacyPolicy`: This is an url to the privacy policy of your service. This should explicitly mention the **information you collect**, how you **use it, its relevance** to make your service work and inform the client on how they can **access, update or delete their personal information**." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:186 +msgid "You can then create *credit packs* which clients can purchase in order to use your service." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:192 +msgid "Packs" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:194 +msgid "A credit pack is essentially a product with five characteristics:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:196 +msgid "Name: name of the pack," +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:197 +msgid "Icon: specific icon for the pack (if not provided, it will fallback on the service icon)," +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:198 +msgid "Description: details on the pack that will appear on the shop page as well as the invoice," +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:200 +msgid "Amount: amount of credits the client is entitled to when buying the pack," +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:201 +msgid "Price: price in EUR (for the time being, USD support is planned)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:205 +msgid "Odoo takes a 25% commission on all pack sales. Adjust your selling price accordingly." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:210 +msgid "Depending on the strategy, the price per credit may vary from one pack to another." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:220 +msgid "Odoo App" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:222 +msgid "does this actually require apps?" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:224 +msgid "The second step is to develop an `Odoo App`_ which clients can install in their Odoo instance and through which they can *request* the services you provide. Our app will just add a button to the Partners form which lets a user request burning some CPU time on the server." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:229 +msgid "First, we will create an *odoo module* depending on ``iap``. IAP is a standard V11 module and the dependency ensures a local account is properly set up and we will have access to some necessary views and useful helpers." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:233 +#: ../../content/developer/howtos/provide_iap_services.rst:248 +msgid "`coalroller/__manifest__.py`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:243 +msgid "Second, the \"local\" side of the integration. Here we will only be adding an action button to the partners view, but you can of course provide significant local value via your application and additional parts via a remote service." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:261 +msgid "`coalroller/views/res_partner_views.xml`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:286 +msgid "We can now implement the action method/callback. This will *call our own server*." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:289 +msgid "There are no requirements when it comes to the server or the communication protocol between the app and our server, but ``iap`` provides a :func:`~odoo.addons.iap.tools.iap_tools.iap_jsonrpc` helper to call a JSON-RPC2_ endpoint on an other Odoo instance and transparently re-raise relevant Odoo exceptions (:class:`~odoo.addons.iap.tools.iap_tools.InsufficientCreditError`, :class:`odoo.exceptions.AccessError` and :class:`odoo.exceptions.UserError`)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:296 +msgid "In that call, we will need to provide:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:298 +msgid "any relevant client parameter (none here)," +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:299 +msgid "the :class:`token ` of the current client that is provided by the ``iap.account`` model's ``account_token`` field. You can retrieve the account for your service by calling :samp:`env['iap.account'].get({service_name})` where :class:`service_name ` is the name of the service registered on IAP endpoint." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:305 +msgid "`coalroller/models/res_partner.py`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:333 +msgid "``iap`` automatically handles :class:`~odoo.addons.iap.tools.iap_tools.InsufficientCreditError` coming from the action and prompts the user to add credits to their account." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:337 +msgid ":func:`~odoo.addons.iap.tools.iap_tools.iap_jsonrpc` takes care of re-raising :class:`~odoo.addons.iap.models.iap.InsufficientCreditError` for you." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:342 +msgid "If you are not using :func:`~odoo.addons.iap.tools.iap_tools.iap_jsonrpc` you *must* be careful to re-raise :class:`~odoo.addons.iap.tools.iap_tools.InsufficientCreditError` in your handler otherwise the user will not be prompted to credit their account, and the next call will fail the same way." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:351 +#: ../../content/developer/reference/frontend/javascript_reference.rst:876 +msgid "Service" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:353 +msgid "Though that is not *required*, since ``iap`` provides both a client helper for JSON-RPC2_ calls (:func:`~odoo.addons.iap.tools.iap_tools.iap_jsonrpc`) and a service helper for transactions (:class:`~odoo.addons.iap.tools.iap_tools.iap_charge`) we will also be implementing the service side as an Odoo module:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:358 +#: ../../content/developer/howtos/provide_iap_services.rst:448 +msgid "`coalroller_service/__manifest__.py`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:368 +msgid "Since the query from the client comes as JSON-RPC2_ we will need the corresponding controller which can call :class:`~odoo.addons.iap.tools.iap_tools.iap_charge` and perform the service within:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:372 +#: ../../content/developer/howtos/provide_iap_services.rst:461 +msgid "`coalroller_service/controllers/main.py`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:406 +msgid "for the actual IAP will the \"portal\" page be on odoo.com or iap.odoo.com?" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:408 +msgid "\"My Account\" > \"Your InApp Services\"?" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:411 +msgid "The :class:`~odoo.addons.iap.tools.iap_tools.iap_charge` helper will:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:413 +msgid "authorize (create) a transaction with the specified number of credits, if the account does not have enough credits it will raise the relevant error" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:416 +msgid "execute the body of the ``with`` statement" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:417 +msgid "if the body of the ``with`` executes successfully, update the price of the transaction if needed" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:419 +msgid "capture (confirm) the transaction" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:420 +msgid "otherwise, if an error is raised from the body of the ``with``, cancel the transaction (and release the hold on the credits)" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:425 +msgid "By default, :class:`~odoo.addons.iap.tools.iap_tools.iap_charge` contacts the *production* IAP endpoint, https://iap.odoo.com. While developing and testing your service you may want to point it towards the *development* IAP endpoint https://iap-sandbox.odoo.com." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:430 +msgid "To do so, set the ``iap.endpoint`` config parameter in your service Odoo: in debug/developer mode, :menuselection:`Setting --> Technical --> Parameters --> System Parameters`, just define an entry for the key ``iap.endpoint`` if none already exists)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:435 +msgid "The :class:`~odoo.addons.iap.tools.iap_tools.iap_charge` helper has two additional optional parameters we can use to make things clearer to the end-user." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:440 +#: ../../content/developer/reference/backend/reports.rst:198 +#: ../../content/developer/reference/extract_api.rst:546 +msgid "``description``" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:439 +msgid "is a message which will be associated with the transaction and will be displayed in the user's dashboard, it is useful to remind the user why the charge exists." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:446 +msgid "``credit_template``" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:443 +msgid "is the name of a :ref:`reference/qweb` template which will be rendered and shown to the user if their account has less credit available than the service provider is requesting, its purpose is to tell your users why they should be interested in your IAP offers." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:488 +msgid "`coalroller_service/views/no-credit.xml`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:511 +msgid "how do you test your service?" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:514 +msgid "JSON-RPC2_ Transaction API" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:519 +msgid "The IAP transaction API does not require using Odoo when implementing your server gateway, calls are standard JSON-RPC2_." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:521 +msgid "Calls use different *endpoints* but the same *method* on all endpoints (``call``)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:523 +msgid "Exceptions are returned as JSON-RPC2_ errors, the formal exception name is available on ``data.name`` for programmatic manipulation." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:526 +msgid "`iap.odoo.com documentation`_ for additional information." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:529 +#: ../../content/developer/howtos/provide_iap_services.rst:775 +msgid "Authorize" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:533 +msgid "Verifies that the user's account has at least as ``credit`` available *and creates a hold (pending transaction) on that amount*." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:536 +msgid "Any amount currently on hold by a pending transaction is considered unavailable to further authorize calls." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:539 +msgid "Returns a :class:`TransactionToken` identifying the pending transaction which can be used to capture (confirm) or cancel said transaction (`iap.odoo.com documentation`_)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:0 +#: ../../content/developer/reference/backend/mixins.rst:0 +#: ../../content/developer/reference/frontend/framework_overview.rst:0 +#: ../../content/developer/reference/frontend/qweb.rst:0 +msgid "Parameters" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:545 +msgid "optional, helps users identify the reason for charges on their account" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:547 +msgid "optional, allows the user to benefit from trial credits if his database is eligible (see :ref:`Service registration `)" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:549 +msgid "optional, transaction time to live in hours. If the credit are not captured when the transaction expires, the transaction is cancelled. The default value is set to 4320 hours (= 180 days)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:0 +#: ../../content/developer/reference/backend/mixins.rst:0 +#: ../../content/developer/reference/frontend/assets.rst:0 +#: ../../content/developer/reference/frontend/framework_overview.rst:0 +#: ../../content/developer/reference/frontend/hooks.rst:0 +#: ../../content/developer/reference/frontend/javascript_reference.rst:0 +#: ../../content/developer/reference/frontend/mobile.rst:0 +#: ../../content/developer/reference/frontend/qweb.rst:0 +#: ../../content/developer/reference/frontend/registries.rst:0 +#: ../../content/developer/reference/frontend/services.rst:0 +msgid "Returns" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:551 +msgid ":class:`TransactionToken` if the authorization succeeded" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:0 +msgid "raises" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:552 +msgid ":class:`~odoo.exceptions.AccessError` if the service token is invalid" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:553 +msgid ":class:`~odoo.addons.iap.models.iap.InsufficientCreditError` if the account does not have enough credits" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:554 +msgid "``TypeError`` if the ``credit`` value is not an integer or a float" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:577 +#: ../../content/developer/howtos/provide_iap_services.rst:855 +msgid "Capture" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:581 +msgid "Confirms the specified transaction, transferring the reserved credits from the user's account to the service provider's." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:584 +msgid "Capture calls are idempotent: performing capture calls on an already captured transaction has no further effect." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:589 +msgid "optional parameter to capture a smaller amount of credits than authorized" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:590 +#: ../../content/developer/howtos/provide_iap_services.rst:622 +msgid ":class:`~odoo.exceptions.AccessError`" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:610 +#: ../../content/developer/howtos/provide_iap_services.rst:817 +msgid "Cancel" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:614 +msgid "Cancels the specified transaction, releasing the hold on the user's credits." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:617 +msgid "Cancel calls are idempotent: performing capture calls on an already cancelled transaction has no further effect." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:640 +#: ../../content/developer/tutorials/getting_started/04_basicmodel.rst:135 +msgid "Types" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:642 +msgid "Exceptions aside, these are *abstract types* used for clarity, you should not care how they are implemented." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:647 +msgid "String identifying your service on https://iap.odoo.com (production) as well as the account related to your service in the client's database." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:652 +msgid "Identifier generated for the provider's service. Each key (and service) matches a token of a fixed value, as generated by the service provide." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:655 +msgid "Multiple types of tokens correspond to multiple services. As an exampe, SMS and MMS could either be the same service (with an MMS being 'worth' multiple SMS) or could be separate services at separate price points." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:659 +msgid "Your service key *is a secret*, leaking your service key allows other application developers to draw credits bought for your service(s)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:665 +msgid "Identifier for a user account." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:669 +msgid "Transaction identifier, returned by the authorization process and consumed by either capturing or cancelling the transaction." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:674 +msgid "Raised during transaction authorization if the credits requested are not currently available on the account (either not enough credits or too many pending transactions/existing holds)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:681 +msgid "Raised by:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:683 +msgid "any operation to which a service token is required, if the service token is invalid; or" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:684 +msgid "any failure in an inter-server call. (typically, in :func:`~odoo.addons.iap.tools.iap_tools.iap_jsonrpc`)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:689 +msgid "Raised by any unexpected behaviour at the discretion of the App developer (*you*)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:693 +msgid "Test the API" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:695 +msgid "In order to test the developed app, we propose a sandbox platform that allows you to:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:697 +msgid "Test the whole flow from the client's point of view - Actual services and transactions that can be consulted. (again this requires to change the endpoint, see the danger note in :ref:`Service `)." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:700 +msgid "Test the API." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:702 +msgid "The latter consists in specific tokens that will work on **IAP-Sandbox only**." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:704 +msgid "Token ``000000``: Represents a non-existing account. Returns an :class:`~odoo.addons.iap.tools.iap_tools.InsufficientCreditError` on authorize attempt." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:706 +msgid "Token ``000111``: Represents an account without sufficient credits to perform any service. Returns an :class:`~odoo.addons.iap.tools.iap_tools.InsufficientCreditError` on authorize attempt." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:708 +msgid "Token ``111111``: Represents an account with enough credits to perform any service. An authorize attempt will return a dummy transaction token that is processed by the capture and cancel routes." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:714 +msgid "Those tokens are only active on the IAP-Sanbox server." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:715 +msgid "The service key is completely ignored with this flow, If you want to run a robust test of your service, you should ignore these tokens." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:719 +msgid "Odoo Helpers" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:721 +msgid "For convenience, if you are implementing your service using Odoo the ``iap`` module provides a few helpers to make IAP flow even simpler." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:727 +msgid "Charging" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:731 +msgid "A *context manager* for authorizing and automatically capturing or cancelling transactions for use in the backend/proxy." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:734 +msgid "Works much like e.g. a cursor context manager:" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:736 +msgid "immediately authorizes a transaction with the specified parameters;" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:737 +msgid "executes the ``with`` body;" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:738 +msgid "if the body executes in full without error, captures the transaction;" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:739 +msgid "otherwise cancels it." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:741 +#: ../../content/developer/howtos/provide_iap_services.rst:781 +#: ../../content/developer/howtos/provide_iap_services.rst:823 +#: ../../content/developer/howtos/provide_iap_services.rst:861 +msgid "used to retrieve the ``iap.endpoint`` configuration key" +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:779 +msgid "Will authorize everything." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:821 +msgid "Will cancel an authorized transaction." +msgstr "" + +#: ../../content/developer/howtos/provide_iap_services.rst:859 +msgid "Will capture the amount ``credit`` on the given transaction." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:3 +msgid "Write lean easy-to-maintain CSS" +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:5 +msgid "There are many ways to lean and simplify SCSS. The first step is to establish if custom code is needed at all." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:8 +msgid "Odoo's webclient has been designed to be modular, meaning that (potentially all) classes can be shared across views. Check the code before creating a new class. Chances are that there is already a class or an HTML tag doing exactly what you're looking for." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:12 +msgid "On top of that, Odoo relies on `Bootstrap `_ (BS), one of the most complete CSS frameworks available. The framework has been customized in order to match Odoo's design (both community and enterprise versions), meaning that you can use any BS class directly in Odoo and achieve a visual result that is consistent with our UI." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:19 +msgid "The fact that a class achieves the desired visual result doesn't necessarily mean that it's the right one for the job. Be aware of classes triggering JS behaviors, for example." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:21 +msgid "Be careful about class semantics. Applying a **button class** to a **title** is not only semantically wrong, it may also lead to migration issues and visual inconsistencies." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:24 +msgid "The following sections describe tips to strip-down SCSS lines **when custom-code is the only way to go**." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:30 +msgid "Browser defaults" +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:32 +msgid "By default, each browser renders content using a *user agent stylesheet*. To overcome inconsistencies between browsers, some of these rules are overridden by `Bootstrap Reboot `_." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:36 +msgid "At this stage all \"browser-specific-decoration\" rules have been stripped away, but a big chunk of rules defining basic layout information is maintained (or reinforced by *Reboot* for consistency reasons)." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:40 +msgid "You can rely on these rules." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:44 +msgid "Applying `display: block;` to a `
` is normally not necessary." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:55 +msgid "In this instance, you may opt to switching the HTML tag rather than adding a new CSS rule." +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:65 +msgid "Here's a non-comprehensive list of default rules:" +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:70 +msgid "Tag / Attribute" +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:71 +msgid "Defaults" +msgstr "" + +#: ../../content/developer/howtos/scss_tips.rst:72 +msgid "`
`, `
`, `
`, `