Compare commits
2 Commits
master-rep
...
master-sph
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b8c5b98cb | ||
|
|
0537e6e7d3 |
@@ -215,11 +215,11 @@ LiveChat
|
||||
--------
|
||||
|
||||
In multiprocessing, a dedicated LiveChat worker is automatically started and
|
||||
listening on :option:`the gevent port <odoo-bin --gevent-port>` but
|
||||
listening on :option:`the longpolling port <odoo-bin --longpolling-port>` but
|
||||
the client will not connect to it.
|
||||
|
||||
Instead you must have a proxy redirecting requests whose URL starts with
|
||||
``/websocket/`` to the gevent port. Other request should be proxied to
|
||||
``/longpolling/`` to the longpolling port. Other request should be proxied to
|
||||
the :option:`normal HTTP port <odoo-bin --http-port>`
|
||||
|
||||
To achieve such a thing, you'll need to deploy a reverse proxy in front of Odoo,
|
||||
@@ -323,15 +323,9 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
|
||||
access_log /var/log/nginx/odoo.access.log;
|
||||
error_log /var/log/nginx/odoo.error.log;
|
||||
|
||||
# Redirect websocket requests to odoo gevent port
|
||||
location /websocket {
|
||||
# Redirect longpoll requests to odoo longpolling port
|
||||
location /longpolling {
|
||||
proxy_pass http://odoochat;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
# Redirect requests to odoo backend server
|
||||
@@ -387,12 +381,12 @@ notifications.
|
||||
The solutions to support livechat/motifications in a WSGI application are:
|
||||
|
||||
* Deploy a threaded version of Odoo (instead of a process-based preforking
|
||||
one) and redirect only requests to URLs starting with ``/websocket/`` to
|
||||
that Odoo, this is the simplest and the websocket URL can double up as the cron
|
||||
instance.
|
||||
one) and redirect only requests to URLs starting with ``/longpolling/`` to
|
||||
that Odoo, this is the simplest and the longpolling URL can double up as
|
||||
the cron instance.
|
||||
* Deploy an evented Odoo via ``odoo-gevent`` and proxy requests starting
|
||||
with ``/websocket/`` to
|
||||
:option:`the gevent port <odoo-bin --gevent-port>`.
|
||||
with ``/longpolling/`` to
|
||||
:option:`the longpolling port <odoo-bin --longpolling-port>`.
|
||||
|
||||
.. _deploy/streaming:
|
||||
|
||||
|
||||
@@ -272,80 +272,55 @@ Enterprise Edition:
|
||||
* `Official download page <download_>`_
|
||||
* `GitHub repository <enterprise-repository_>`_
|
||||
|
||||
.. _setup/install/source/git:
|
||||
|
||||
Git
|
||||
~~~
|
||||
|
||||
The following requires `Git <git_>`_ to be installed on your machine and that you have basic
|
||||
knowledge of Git commands. To clone a Git repository, you must choose between cloning with HTTPS or
|
||||
SSH. If you do not know the difference between the two, the best option is most likely HTTPS. If you
|
||||
are following the :doc:`Getting started </developer/howtos/rdtraining>` developer tutorial, or plan
|
||||
on contributing to Odoo source code, choose SSH.
|
||||
The following requires `git <https://git-scm.com/>`_ to be installed on your machine and that you
|
||||
have basic knowledge of git commands.
|
||||
|
||||
.. note::
|
||||
**The Enterprise Git repository does not contain the full Odoo source code**. It is only a
|
||||
collection of extra add-ons. The main server code is in the Community version. Running the
|
||||
Enterprise version actually means running the server from the Community version with the
|
||||
addons-path option set to the folder with the Enterprise version. You need to clone both the
|
||||
Community and Enterprise repository to have a working Odoo Enterprise installation. See
|
||||
:ref:`setup/install/editions` to get access to the Enterprise repository.
|
||||
Community Edition:
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. tabs::
|
||||
.. code-block:: doscon
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone https://github.com/odoo/odoo.git
|
||||
C:\> git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone git@github.com:odoo/odoo.git
|
||||
C:\> git clone git@github.com:odoo/enterprise.git
|
||||
C:\> git clone https://github.com/odoo/odoo.git
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. tabs::
|
||||
.. code-block:: console
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. tabs::
|
||||
.. code-block:: console
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
|
||||
.. code-block:: console
|
||||
Enterprise Edition: (see :ref:`setup/install/editions` to get access)
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: console
|
||||
.. code-block:: doscon
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
C:\> git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. note::
|
||||
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
|
||||
@@ -354,8 +329,6 @@ on contributing to Odoo source code, choose SSH.
|
||||
addons-path option set to the folder with the Enterprise version. You need to clone both the
|
||||
Community and Enterprise repository to have a working Odoo Enterprise installation.
|
||||
|
||||
.. _setup/install/source/prepare:
|
||||
|
||||
Prepare
|
||||
-------
|
||||
|
||||
@@ -478,11 +451,6 @@ PostgreSQL
|
||||
<https://postgresapp.com>`_ to download and install PostgreSQL (supported version: 10.0 and
|
||||
later).
|
||||
|
||||
.. tip::
|
||||
To make the command line tools bundled with `postgres.app` available, make sure to setup your
|
||||
`$PATH` variable by following the `Postgres.app CLI Tools Instructions
|
||||
<https://postgresapp.com/documentation/cli-tools.html>`_.
|
||||
|
||||
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
|
||||
to create a new PostgreSQL user:
|
||||
|
||||
@@ -677,8 +645,8 @@ A typical way to run the server would be:
|
||||
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, `dbuser` is the
|
||||
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
|
||||
PostgreSQL database.
|
||||
PostgreSQL login, `dbpassword` is the PostgreSQL password and `mydb` is the default database
|
||||
to serve on `localhost:8069`.
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
@@ -687,8 +655,8 @@ A typical way to run the server would be:
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
|
||||
database to serve on `localhost:8069`.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
@@ -697,22 +665,11 @@ A typical way to run the server would be:
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
After the server has started (the INFO log `odoo.modules.loading: Modules loaded.` is printed), open
|
||||
http://localhost:8069 in your web browser and log in with the base administrator account: Use
|
||||
`admin` for the :guilabel:`Email` and, again, `admin` for the :guilabel:`Password`. That's it, you
|
||||
just logged into your own Odoo database!
|
||||
|
||||
.. tip::
|
||||
- From there, you can create and manage new :doc:`users
|
||||
</applications/general/users/manage_users>`.
|
||||
- The user account you use to log into Odoo's web interface differs from the :option:`--db_user
|
||||
<odoo-bin -r>` CLI argument.
|
||||
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
|
||||
database to serve on `localhost:8069`.
|
||||
|
||||
.. seealso::
|
||||
:doc:`The exhaustive list of CLI arguments for odoo-bin </developer/cli>`.
|
||||
- :doc:`The exhaustive list of arguments for odoo-bin </developer/cli>`.
|
||||
|
||||
.. _setup/install/docker:
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ From Odoo.sh to Odoo Online
|
||||
|
||||
- Your subscription number
|
||||
- The URL you want to use for your database (e.g., `example.odoo.com`)
|
||||
- Which branch you want to migrate
|
||||
- Which brand you want to migrate
|
||||
- In which region you want to be hosted:
|
||||
|
||||
- Americas
|
||||
|
||||
@@ -279,21 +279,10 @@ The *import database* feature accepts database archives in the format provided b
|
||||
* the Odoo.sh backup download button of this *Backups* tab,
|
||||
* the Odoo.sh dump download button in the :ref:`Builds view <odoosh-gettingstarted-builds>`.
|
||||
|
||||
.. _odoo_sh/upgrade:
|
||||
|
||||
Upgrade
|
||||
-------
|
||||
|
||||
Available for production and staging branches for valid projects.
|
||||
|
||||
.. seealso::
|
||||
:doc:`Upgrade - Odoo.sh <../../upgrade/odoo_sh>`
|
||||
|
||||
.. _odoosh-gettingstarted-branches-tabs-settings:
|
||||
|
||||
Settings
|
||||
--------
|
||||
|
||||
Here you can find a couple of settings that only apply to the currently selected branch.
|
||||
|
||||
.. image:: branches/interface-branches-settings.jpg
|
||||
@@ -395,7 +384,7 @@ we are considering the feature if there is enough demand.
|
||||
In case the domain of your users email addresses use SPF (Sender Policy Framework) or DKIM
|
||||
(DomainKeys Identified Mail), don't forget to authorize Odoo as a sending host in your domain name
|
||||
settings to increase the deliverability of your outgoing emails.
|
||||
The configuration steps are explained in the documentation about :ref:`SPF
|
||||
The configuration steps are explained in the documentation about :ref:`SPF
|
||||
<email_communication/spf_compliant>` and :ref:`DKIM <email_communication/dkim_compliant>`.
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 32 KiB |
@@ -1,132 +1,66 @@
|
||||
|
||||
=======
|
||||
Odoo.sh
|
||||
=======
|
||||
|
||||
.. _upgrade/odoo_sh/overview:
|
||||
Test upgrade request
|
||||
====================
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
Odoo.sh is integrated with the upgrade platform to make the upgrade process easier.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Upgrade` tab is available in the branches view. It is only available for valid
|
||||
projects with a valid production build.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-menu.png
|
||||
:align: center
|
||||
:alt: Click on the upgrade menu
|
||||
|
||||
The suggested upgrade steps on Odoo.sh are:
|
||||
|
||||
#. On a :guilabel:`Development` branch, upgrade your custom modules to keep them compatible with the
|
||||
new version and thoroughly **test them**.
|
||||
#. Switch that branch to the :guilabel:`Staging` branch, **upgrade** the last daily production
|
||||
backup and **test it**. Write upgrade scripts if necessary.
|
||||
#. Trigger the production upgrade from your :guilabel:`Production` branch and sit tight.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../administration/upgrade`
|
||||
- :doc:`Upgrade FAQ <../upgrade/faq>`
|
||||
- :doc:`Introduction to Odoo.sh <../odoo_sh/overview/introduction>`
|
||||
|
||||
.. _upgrade/odoo_sh/custom-modules:
|
||||
|
||||
Upgrade your custom modules
|
||||
===========================
|
||||
|
||||
The first step is to upgrade your custom modules to keep them compatible with the new version. Fork
|
||||
your :guilabel:`Production` branch in the :guilabel:`Development` stage, then go to the settings of
|
||||
your :guilabel:`Development` branch and select the Odoo version you target. If needed, modify your
|
||||
code to be compatible with the new version. Make sure to **test** your features are still working
|
||||
correctly.
|
||||
|
||||
.. note::
|
||||
Depending on your contract, the upgrade of your custom modules can be done by yourself, by your
|
||||
Partner or by Odoo (if you hold a subscription including maintenance of customizations).
|
||||
|
||||
.. _upgrade/odoo_sh/testing-phase:
|
||||
|
||||
Upgrade your database on a staging branch
|
||||
=========================================
|
||||
|
||||
Take the upgraded development branch and drag & drop it to :guilabel:`Staging`.
|
||||
|
||||
Go to the :guilabel:`Upgrade` tab and select the :guilabel:`target version`. Then, click on
|
||||
:guilabel:`Test Upgrade`.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-staging.png
|
||||
:align: center
|
||||
:alt: Odoo.sh project and tabs
|
||||
|
||||
The **latest production daily automatic backup** is sent to the
|
||||
`upgrade platform <https://www.upgrade.odoo.com>`_ to start the upgrade test process.
|
||||
|
||||
.. note::
|
||||
You can follow the upgrade process by going to the :guilabel:`Upgrade` menu of your
|
||||
:guilabel:`Production` branch.
|
||||
|
||||
When the upgraded backup is ready on the `upgrade platform <https://www.upgrade.odoo.com>`_, it is
|
||||
automatically downloaded back to your project.
|
||||
|
||||
The branch is now in a **special mode**: each time a **commit is pushed** on the branch, a
|
||||
**restore operation** of the upgraded backup occurs, and an **update of all the custom modules**
|
||||
happens. This allows you to quickly iterate on your custom modules upgrade scripts. The log file of
|
||||
the upgrade process can be found at :file:`~/logs/upgrade.log` in your newly upgraded staging build.
|
||||
|
||||
.. note::
|
||||
- The **special upgrade mode** is automatically closed after 30 days.
|
||||
- It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has
|
||||
to be handled afterwards.
|
||||
|
||||
Functionally test your upgraded database
|
||||
========================================
|
||||
|
||||
Now that the test upgraded database is available on your staging branch, **thoroughly test it** and
|
||||
make sure everything runs as it's supposed to. Once you are satisfied with the result, you are ready
|
||||
to upgrade your production database.
|
||||
|
||||
Production upgrade
|
||||
==================
|
||||
|
||||
Once you are happy with your testing, you can start the process on the :guilabel:`Production`
|
||||
branch.
|
||||
|
||||
On your :guilabel:`Production` branch, go to the :guilabel:`Upgrade` tab, select the
|
||||
:guilabel:`targeted version` and click on the :guilabel:`start Upgrade` button.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-prod.png
|
||||
:align: center
|
||||
:alt: View from the upgrade tab
|
||||
|
||||
The actual process is **triggered as soon as you push a new commit** in your branch. Make sure you
|
||||
are pushing code that is compatible with the new version. For example by merging the code from your
|
||||
upgraded staging branch.
|
||||
|
||||
.. note::
|
||||
You can see the progress of the upgrade by going to the :guilabel:`Upgrade` tab of the main
|
||||
branch.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-progress.png
|
||||
:align: center
|
||||
:alt: View showing the progress of the upgrade
|
||||
Download a dump of your database (from the :ref:`Builds view
|
||||
<odoosh-gettingstarted-builds-download-dump>`), choose the **exact copy** and **without filestore**
|
||||
options. Upload the .sql.gz dump on https://upgrade.odoo.com/upload and select the testing purpose.
|
||||
Once it's processed, you'll get a dump of the database in return.
|
||||
|
||||
.. important::
|
||||
Your database is unavailable throughout the process.
|
||||
To have the most up-to-date test version of your database, create a backup of your production
|
||||
database just before creating your request. Upload it in your staging branch, select **Exact
|
||||
dump** and **Without filestore**, and then click *start*.
|
||||
|
||||
Test your upgraded database
|
||||
===========================
|
||||
|
||||
At the beginning of your upgrade project, make sure that you create a new staging branch for testing
|
||||
purposes by forking your main branch.
|
||||
|
||||
Once the staging build is complete (it doesn't matter if it failed due to the version
|
||||
incompatibility), import your upgraded dump in the *Backups* tab of the branch.
|
||||
|
||||
.. note::
|
||||
If anything goes wrong, the platform automatically reverts the upgrade, the same as it would be
|
||||
for a regular update. In case of success, a backup is always made.
|
||||
The platform automatically detects the version of the dump and changes the version of Odoo's
|
||||
source code to the corresponding version of the build.
|
||||
|
||||
The update of your custom modules must be successful to complete the entire upgrade process. Make
|
||||
sure the status of your staging upgrade is :guilabel:`successful` before trying it in production.
|
||||
Test the upgraded database and make sure everything runs as it's supposed to.
|
||||
|
||||
.. note::
|
||||
It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has to
|
||||
be handled afterwards.
|
||||
Upgrade your production database
|
||||
================================
|
||||
|
||||
Once you've tested everything and you're satisfied, start the process over to get an up-to-date
|
||||
upgraded dump:
|
||||
|
||||
* Make a new dump of your production database (as described in step 1)
|
||||
* Upload it on upgrade.odoo.com and select the Production purpose
|
||||
* Receive the newly upgraded dump and import it in your production branch. The build might get
|
||||
marked as failed because the platform will run it with the upgraded databases' Odoo version
|
||||
together with the old custom code.
|
||||
* Merge or commit the upgraded custom code in the production branch
|
||||
|
||||
If anything goes wrong, remember you can restore a backup. The platform will always make one before
|
||||
you make any Odoo.sh operation on the production database. If the restored backup comes from a
|
||||
previous version, the platform will detect it and change the project's Odoo version back if it needs
|
||||
to.
|
||||
|
||||
Custom modules (if applicable)
|
||||
==============================
|
||||
|
||||
The upgrade of a database that contains custom modules is a 2 step process.
|
||||
|
||||
#. The standard upgrade is done when your upgrade request is completed.
|
||||
#. Your custom modules also need to be upgraded to keep them compatible with the new version.
|
||||
|
||||
Depending on your contract, the upgrade of your custom modules can be done
|
||||
- by yourself
|
||||
- by your Partner
|
||||
- by Odoo (if you hold a subscription to 'Maintenance of Customizations')
|
||||
|
||||
.. seealso::
|
||||
- :ref:`upgrade/sla`
|
||||
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 31 KiB |
@@ -15,4 +15,3 @@ Customer invoices
|
||||
customer_invoices/credit_notes
|
||||
customer_invoices/epc_qr_code
|
||||
customer_invoices/snailmail
|
||||
customer_invoices/electronic_invoicing
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
================================================================
|
||||
Electronic invoicing (:abbr:`EDI (electronic data interchange)`)
|
||||
================================================================
|
||||
|
||||
EDI, or electronic data interchange, is the inter-company communication of business documents, such
|
||||
as purchase orders and invoices, in a standard format. Sending documents according to an EDI
|
||||
standard ensures that the machine receiving the message can interpret the information correctly.
|
||||
Various EDI file formats exist and are available depending on your company's country.
|
||||
|
||||
EDI feature enables automating the administration between companies and might also be required by
|
||||
some governments for fiscal control or to facilitate the administration.
|
||||
|
||||
Electronic invoicing of your documents such as customer invoices, credit notes or vendor bills is
|
||||
one of the application of EDI.
|
||||
|
||||
Odoo supports, among others, the following formats.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Format Name
|
||||
- Applicability
|
||||
* - Factur-X (CII)
|
||||
- Default format on Odoo (enabled by default)
|
||||
* - Peppol BIS Billing 3.0 (UBL)
|
||||
- For companies whose countries are part of the `EAS list
|
||||
<https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/>`_
|
||||
* - E-FFF
|
||||
- For Belgian companies
|
||||
* - XRechnung (UBL)
|
||||
- For German companies
|
||||
* - Fattura PA (IT)
|
||||
- For Italian companies
|
||||
* - CFDI (4.0)
|
||||
- For Mexican companies
|
||||
* - Peru UBL 2.1
|
||||
- For Peruvian companies
|
||||
* - SII IVA Llevanza de libros registro (ES)
|
||||
- For Spanish companies
|
||||
* - UBL 2.1 (Columbia)
|
||||
- For Colombian companies
|
||||
* - Egyptian Tax Authority
|
||||
- For Egyptian companies
|
||||
* - E-Invoice (IN)
|
||||
- For Indian companies
|
||||
* - NLCIUS (Netherlands)
|
||||
- For Dutch companies
|
||||
* - EHF 3.0
|
||||
- For Norwegian companies
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../fiscal_localizations/overview/fiscal_localization_packages`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Journals --> Customer Invoices --> Advanced
|
||||
Settings --> Electronic Invoicing` and enable the formats you need for this journal.
|
||||
|
||||
.. image:: electronic_invoicing/formats.png
|
||||
:align: center
|
||||
:alt: Select the EDI format you need
|
||||
|
||||
Once an electronic invoicing format is enabled, XML documents are generated when clicking on
|
||||
:guilabel:`Confirm` in documents such as invoices, credit notes, etc. These documents are either
|
||||
visible in the attachment section, or embedded in the PDF.
|
||||
|
||||
.. note::
|
||||
- For E-FFF, the xml file only appears after having generated the PDF (:guilabel:`Print` or
|
||||
:guilabel:`Send & Print` button), since the PDF needs to be embedded inside the xml.
|
||||
- By default, the :guilabel:`Factur-X` option is enabled. It means that an XML file is
|
||||
automatically included in the PDF document that is sent.
|
||||
- The formats available depend on the country registered in your company's :guilabel:`General
|
||||
Information`.
|
||||
- Odoo supports the **Peppol BIS Billing 3.0** format that can be used via existing access
|
||||
points.
|
||||
|
||||
Add new formats to a database created before July 2022
|
||||
------------------------------------------------------
|
||||
|
||||
If your database was created before July 2022 and you wish to use one of the formats available from
|
||||
July 2022, you have to :ref:`install <general/install>` the module :guilabel:`Import/Export
|
||||
electronic invoices with UBL/CII` (module’s technical name: `account_edi_ubl_cii`) and your
|
||||
country-specific module.
|
||||
|
||||
.. example::
|
||||
If you want to use the Belgian format E-FFF in a database created prior to July 2022, you need to
|
||||
:ref:`install <general/install>`:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Name
|
||||
- Technical name
|
||||
* - Belgium - E-Invoicing (UBL 2.0, e-fff)
|
||||
- `l10n_be_edi`
|
||||
* - Import/Export electronic invoices with UBL/CII
|
||||
- `account_edi_ubl_cii`
|
||||
|
||||
.. note::
|
||||
Once the new module is installed, UBL 2.0 and UBL 2.1 formats no longer appear in the journal
|
||||
since UBL BIS Billing 3.0 is available and more widely supported.
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -10,7 +10,6 @@ Payment acquirers (credit cards, online payments)
|
||||
payment_acquirers/wire_transfer
|
||||
payment_acquirers/adyen
|
||||
payment_acquirers/alipay
|
||||
payment_acquirers/amazon_payment_services
|
||||
payment_acquirers/authorize
|
||||
payment_acquirers/buckaroo
|
||||
payment_acquirers/flutterwave
|
||||
@@ -74,11 +73,6 @@ Online payment acquirers
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Amazon Payment Services <payment_acquirers/amazon_payment_services>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Authorize.Net <payment_acquirers/authorize>`
|
||||
- Payment from Odoo
|
||||
- |V|
|
||||
@@ -289,45 +283,15 @@ Countries
|
||||
*********
|
||||
|
||||
Restrict the use of the payment acquirer to a selection of countries. Leave this field blank to make
|
||||
the payment acquirer available in all countries.
|
||||
the payment acquirer available to all countries.
|
||||
|
||||
.. _payment_acquirers/journal:
|
||||
|
||||
Maximum Amount
|
||||
**************
|
||||
|
||||
Restrict the maximum amount that can be paid with the selected acquirer. Leave this field to `0.00`
|
||||
to make the payment acquirer available regardless of the payment amount.
|
||||
|
||||
.. important::
|
||||
This feature is not intended to work on pages which allow the customer to update the payment
|
||||
amount. For example, the **Donation** snippet of the Website app, and the **Checkout** page of
|
||||
the **eCommerce** app when paid delivery methods are enabled.
|
||||
|
||||
Payment journal
|
||||
***************
|
||||
|
||||
The **Payment journal** selected for your payment acquirer must be a *Bank* journal.
|
||||
|
||||
.. _payment_acquirers/publish:
|
||||
|
||||
Publish on the website
|
||||
----------------------
|
||||
|
||||
By default, payment acquirers are *unpublished*, which means that only internal users can see them
|
||||
on the website. Your customers cannot make payments through an unpublished acquirer but they can
|
||||
still manage :dfn:`(delete and assign to a subscription)` their already existing tokens linked to
|
||||
such an acquirer. This conveniently allows you to test an acquirer while preventing making payments
|
||||
and registering new tokens.
|
||||
|
||||
Click on the :guilabel:`Publish` button located in the top right corner of the acquirer's form to
|
||||
publish it on the website and make it available to your customers. Click on the
|
||||
:guilabel:`Unpublish` button to unpublish it.
|
||||
|
||||
.. tip::
|
||||
Payment acquirers are automatically published and unpublished when you respectively change their
|
||||
state to `enabled` and `test`.
|
||||
|
||||
.. _payment_acquirers/accounting:
|
||||
|
||||
Accounting perspective
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
=======================
|
||||
Amazon Payment Services
|
||||
=======================
|
||||
|
||||
`Amazon Payment Services <https://flutterwave.com/>`_ or APS is an online payment provider
|
||||
established in Dubai offering several online payment options.
|
||||
|
||||
.. _payment_acquirers/aps/configure-dashboard:
|
||||
|
||||
Configuration on APS Dashboard
|
||||
==============================
|
||||
|
||||
#. Log into your `Amazon Payment Services Dashboard <https://fort.payfort.com/>`_ and go to
|
||||
:menuselection:`Integration Settings --> Security Settings`. Generate the
|
||||
:guilabel:`Access Code` if none has been generated yet. Copy the values of the
|
||||
:guilabel:`Merchant Identifier`, :guilabel:`Access Code`, :guilabel:`SHA Request Phrase` and
|
||||
:guilabel:`SHA Response Phrase` fields, and save them for later.
|
||||
#. Enter your Odoo database URL in the :guilabel:`Origin URL`, for example:
|
||||
`https://yourcompany.odoo.com/`. Then, click on :guilabel:`Save Changes`.
|
||||
#. Navigate to :menuselection:`Integration Settings --> Technical Settings` and click on
|
||||
:guilabel:`Redirection`. Make sure :guilabel:`Status` is set to `Active` and select your
|
||||
preferred payment methods underneath in :guilabel:`Payment Options`.
|
||||
#. | Set :guilabel:`Send Response Parameters` to :guilabel:`Yes` and enter your database URL
|
||||
followed by `/payment/aps/return` in the :guilabel:`Redirection URL`.
|
||||
| For example `https://yourcompany.odoo.com/payment/aps/return`.
|
||||
| Enter your database URL followed by `/payment/aps/webhook` in the
|
||||
:guilabel:`Direct Transaction Feedback` and :guilabel:`Notification URL` fields.
|
||||
| For example `https://yourcompany.odoo.com/payment/aps/webhook`.
|
||||
| Click on :guilabel:`Save Changes`.
|
||||
#. Under :menuselection:`Integration Settings --> Payment Page Template` you can customize the
|
||||
look and feel of the Amazon Payment Services payment page (where customers fill out their
|
||||
credit card details during payment).
|
||||
|
||||
.. _payment_acquirers/aps/configure-odoo:
|
||||
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
#. :ref:`Navigate to the payment acquirer Amazon Payment Services <payment_acquirers/add_new>`,
|
||||
change its state to :guilabel:`Enabled`, and make sure it is :guilabel:`Published`.
|
||||
#. In the :guilabel:`Credentials` tab, fill the :guilabel:`Merchant Identifier`,
|
||||
:guilabel:`Access Code`, :guilabel:`SHA Request Phrase` and :guilabel:`SHA Response Phrase` with
|
||||
the values you saved at the step :ref:`payment_acquirers/aps/configure-dashboard`.
|
||||
#. Configure the rest of the options to your liking.
|
||||
@@ -5,100 +5,95 @@ Ogone
|
||||
`Ogone <https://www.ingenico.com/>`_, also known as **Ingenico Payment Services** is a France-based
|
||||
company that provides the technology involved in secure electronic transactions.
|
||||
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
- `Ogone's documentation <https://epayments-support.ingenico.com/get-started/>`_.
|
||||
|
||||
Settings in Ogone
|
||||
=================
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Create an API user
|
||||
------------------
|
||||
Odoo needs your **API Credentials** to connect with your Ogone account, which comprise:
|
||||
|
||||
Log into your Ogone account and head to the :guilabel:`Configuration` tab.
|
||||
- **PSPID**: The ID solely used to identify the account with Ogone. You chose it when you opened
|
||||
your account.
|
||||
- :ref:`API User ID <ogone/api_user>`: The ID solely used to identify the user with Ogone.
|
||||
- :ref:`API User Password <ogone/api_user>`: Value used to identify the user with Ogone.
|
||||
- :ref:`SHA Key IN <ogone/sha_key_in>`: Key used in the signature Odoo send to Ogone.
|
||||
- :ref:`SHA Key OUT <ogone/sha_key_out>`: Key used in the signature Ogone send to Odoo.
|
||||
|
||||
You need to create an **API user** to be used in the creation of transactions from Odoo. While you
|
||||
can use your main account to do so, using an **API user** ensures that if the credentials used in
|
||||
Odoo are leaked, no access to your Ogone configuration is possible. Additionally, passwords for
|
||||
**API users** do not need to be updated regularly, unlike normal users.
|
||||
You can copy your credentials from your Ogone account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
To create an **API user**, go to :menuselection:`Configuration --> Users` and click on
|
||||
:guilabel:`New User`. The following fields must be configured:
|
||||
.. _ogone/api_user:
|
||||
|
||||
.. _ogone/ogone:
|
||||
API User ID and Password
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- :guilabel:`UserID`: you can choose anything you want.
|
||||
- :guilabel:`User's Name, E-mail and Timezone`: you can enter the information you want.
|
||||
- :guilabel:`Profile`: should be set to :guilabel:`Admin`.
|
||||
- :guilabel:`Special user for API`: should be checked.
|
||||
If you already created a user and have both its ID and password, just copy them. You can also
|
||||
generate a new password from :menuselection:`Configuration --> Users --> Your chosen user --> change
|
||||
password`.
|
||||
|
||||
After the creation of the user, you are required to generate a password. Save the password and
|
||||
**UserID**, as they will be required later on during the setup.
|
||||
If you don't have a user, create one by going to :menuselection:`Configuration --> Users -->
|
||||
New User`. Set your **User ID** to get your **password** when you save your new user.
|
||||
|
||||
.. tip::
|
||||
If you already have an user set up, make sure it is activated without any error. If not, simply
|
||||
click the :guilabel:`Activate(Errors)` button to reset the user.
|
||||
.. image:: ogone/ogone_new_user.png
|
||||
:align: center
|
||||
:alt: Get your password when you save the new user.
|
||||
|
||||
Set up Ogone for Odoo
|
||||
---------------------
|
||||
.. _ogone/sha_key_in:
|
||||
|
||||
Ogone must now be configured to accept payments from Odoo. Head to :menuselection:`Configuration -->
|
||||
Technical Information --> Global Security Parameters`, select :guilabel:`SHA-512` as
|
||||
:guilabel:`Hash Algorithm` and :guilabel:`UTF-8` as :guilabel:`character encoding`. Then, go to the
|
||||
:guilabel:`Data and Origin verification` tab of the same page and leave the URL field of the
|
||||
:guilabel:`e-Commerce and Alias Gateway` section blank.
|
||||
SHA Key IN
|
||||
~~~~~~~~~~
|
||||
|
||||
.. tip::
|
||||
If you need to use another algorithm, such as `sha-1` or `sha-256`, within Odoo, activate the
|
||||
:ref:`developer mode <developer-mode>` and go to the **Payment Acquirers** page in
|
||||
:menuselection:`Accounting --> Configuration --> Payment Acquirers`. Click on :guilabel:`Ogone`,
|
||||
and in the :guilabel:`Credentials` tab, select the algorithm you wish to use in the
|
||||
:guilabel:`Hash function` field.
|
||||
In order to retrieve the SHA Key IN, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Data and origin verification -->
|
||||
Checks for e-Commerce & Alias Gateway`, and retrieve **SHA Key IN**.
|
||||
|
||||
You are now required to generate **SHA-IN** passphrases. **SHA-IN** and **SHA-OUT** passphrases are
|
||||
used to digitally sign the transaction requests and responses between Odoo and Ogone. By using these
|
||||
secret passphrases and the `sha-1` algorithm, both systems can ensure that the information they
|
||||
receive from the other was not altered or tampered with.
|
||||
.. _ogone/sha_key_out:
|
||||
|
||||
Enter the same **SHA-IN** passphrase in both :guilabel:`Checks for e-Commerce & Alias Gateway` and
|
||||
:guilabel:`Checks for DirectLink and Batch (Automatic)`. You can leave the IP address field blank.
|
||||
SHA Key OUT
|
||||
~~~~~~~~~~~
|
||||
|
||||
Your **SHA-IN** and **SHA-OUT** passphrases should be different, and between 16 and 32 characters
|
||||
long. Make sure to use the same **SHA-IN** and **SHA-OUT** passphrases throughout the entire Ogone
|
||||
configuration, as Odoo only allows a single **SHA-IN** and single **SHA-OUT** passphrase.
|
||||
In order to retrieve the SHA Key OUT, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All transaction
|
||||
submission modes`, and get or generate your **API Key** and **Client Key**. Be careful to copy your
|
||||
API key as you'll not be allowed to get it later without generating a new one.
|
||||
|
||||
In order to retrieve the **SHA-OUT** key, log into your Ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All
|
||||
transaction submission modes`, and get or generate your **API Key** and **Client Key**. Be careful
|
||||
to copy your API key as you’ll not be allowed to get it later without generating a new one.
|
||||
.. important::
|
||||
If you are trying Ogone as a test, with the Test Account, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
When done, head to :menuselection:`Configuration --> Technical Information --> Transaction Feedback`
|
||||
and check the following options:
|
||||
Hash function
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- The :guilabel:`URL` fields for :guilabel:`HTTP redirection in the browser` can be left empty, as
|
||||
Odoo will specify these URLs for every transaction request.
|
||||
- :guilabel:`I would like to receive transaction feedback parameters on the redirection URLs`:
|
||||
should be checked.
|
||||
- :guilabel:`Direct HTTP server-to-server request`: should to be set to `Online but switch to a
|
||||
deferred request when the online request fails`.
|
||||
- Both **URL** fields should contain the same following URL, with `<example>` replaced by your
|
||||
database: `https://<example>/payment/ogone/return`.
|
||||
The hash function used to communicate with Ogone. It should be similar to the one set on Ogone.
|
||||
|
||||
- :guilabel:`Dynamic eCommerce Parameters` should contain the following values: `ALIAS`, `AMOUNT`,
|
||||
`CARDNO`, `CN`, `CURRENCY`, `IP`, `NCERROR` `ORDERID`, `PAYID`, `PM`, `STATUS`, `TRXDATE`. Other
|
||||
parameters can be included (if you have another integration with Ogone that requires them), but
|
||||
are not advised.
|
||||
- In the :guilabel:`All transaction submission modes` section, fill out **SHA-OUT** passphrase and
|
||||
disable `HTTP request for status change`.
|
||||
For new Odoo database, it's set to 'SHA512' by default which is Ogone default.
|
||||
If you upgrade from an older Odoo version, it will be set to Odoo's old default ('SHA1').
|
||||
|
||||
To allow your customers to save their credit card credentials for future use, head to
|
||||
:menuselection:`Configuration --> Alias --> My alias information`. From this tab, you can configure
|
||||
how the user can have its card details saved, for how long the information is saved, if a checkbox
|
||||
to save the card information should be displayed, etc.
|
||||
This setting is only available in developer mode.
|
||||
|
||||
Settings in Odoo
|
||||
================
|
||||
|
||||
To set up Ogone in Odoo, head to :menuselection:`Accounting --> Configuration --> Payment Acquirers`
|
||||
and open the Ogone acquirer. In the :guilabel:`Credentials` tab, enter the **PSPID** of your Ogone
|
||||
account, and fill out the other fields as configured in your :ref:`Ogone portal <ogone/ogone>`.
|
||||
Configuration on Ogone
|
||||
======================
|
||||
|
||||
Now that Odoo can communicate with Ogone, we need to make sure that Ogone can send information to
|
||||
your database.
|
||||
|
||||
To do so, log into your Ogone account and go to :menuselection:`Configuration --> Technical
|
||||
Information --> Transaction feedback --> Direct HTTP server-to-server request`.
|
||||
|
||||
Then, fill the form with the following data:
|
||||
|
||||
- In the **Timing of the request**, select *Online but switch to a deferred request when the online
|
||||
requests fail*.
|
||||
- | Enter your Odoo databases URL in both **URLs** followed by ``/payment/ogone/return``.
|
||||
| For example: ``https://yourcompany.odoo.com/payment/ogone/return``
|
||||
- Select *POST* for the **Request Method**.
|
||||
|
||||
Save, and you are ready to go!
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
@@ -155,19 +155,15 @@ Odoo supports the following local payment methods:
|
||||
- iDEAL
|
||||
- Przelewy24 (P24)
|
||||
|
||||
To enable some of these local payment methods with Stripe, list them as supported payment icons. To
|
||||
do so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired
|
||||
To enable specific local payment methods with Stripe, list them as supported payment icons. To do
|
||||
so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired
|
||||
payment methods in the **Supported Payment Icons** field. If the desired payment method is already
|
||||
listed, you don't have anything to do.
|
||||
listed, you don't have anything to do. If a payment icon record doesn't exist in the database, its
|
||||
related payment method is considered enabled with Stripe.
|
||||
|
||||
.. image:: stripe/stripe_enable_local_payment_method.png
|
||||
:align: center
|
||||
:alt: Select and add icons of the payment methods you want to enable
|
||||
|
||||
.. note::
|
||||
- If a payment icon record does not exist in the database and its related local payment method is
|
||||
listed above, it is considered enabled with Stripe.
|
||||
- If a local payment method is not listed above, it is not supported and cannot be enabled.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
:nosearch:
|
||||
|
||||
===============
|
||||
Inventory & MRP
|
||||
Inventory & Mrp
|
||||
===============
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ To link the scale to the **IoT Box**, connect them with a cable.
|
||||
.. note::
|
||||
In some cases, a serial to USB adapter may be needed.
|
||||
|
||||
If your scale is `compatible with Odoo IoT Box <https://www.odoo.com/page/iot-hardware>`_, there
|
||||
If your scale is `compatibale with Odoo IoT Box <https://www.odoo.com/page/iot-hardware>`_, there
|
||||
is no need to set up anything because it will be automatically detected as soon as it is connected.
|
||||
|
||||
.. image:: scale/iot-choice.png
|
||||
|
||||
@@ -1,30 +1,21 @@
|
||||
:nosearch:
|
||||
:show-content:
|
||||
:hide-page-toc:
|
||||
:show-toc:
|
||||
|
||||
======
|
||||
Studio
|
||||
======
|
||||
|
||||
Learn all you need in order to build custom applications: customize views, create specific reports,
|
||||
automate actions, define approval workflows, etc.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
studio/fields
|
||||
studio/views
|
||||
studio/models_modules_apps
|
||||
studio/automated_actions
|
||||
|
||||
Studio is a toolbox that allows you to customize Odoo without coding knowledge. For example, you
|
||||
can, on any app, add or modify:
|
||||
|
||||
- :doc:`Fields <studio/fields>`
|
||||
- :doc:`Views <studio/views>`
|
||||
- :doc:`Models <studio/models_modules_apps>`
|
||||
- :doc:`Automated actions <studio/automated_actions>`
|
||||
- PDF reports
|
||||
- Approval rules
|
||||
- Security rules
|
||||
|
||||
Or you can :doc:`build an app from scratch <studio/models_modules_apps>`.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_
|
||||
studio/concepts
|
||||
studio/use_cases
|
||||
studio/how_to
|
||||
|
||||
@@ -1,249 +0,0 @@
|
||||
===============================
|
||||
Automated actions (automations)
|
||||
===============================
|
||||
|
||||
Automated actions are used to trigger automatic changes based on user actions (e.g., apply a
|
||||
modification when a field is set to a specific value) or on time conditions (e.g., archive a record
|
||||
7 days after its last update).
|
||||
|
||||
To create an automated action with Studio, go to :guilabel:`Automations` from anywhere within
|
||||
Studio.
|
||||
|
||||
For every automated action you create, the following elements should be defined: the
|
||||
:ref:`studio/automated-actions/model`, the :ref:`studio/automated-actions/trigger`, the
|
||||
:ref:`studio/automated-actions/apply-on`, and the :ref:`studio/automated-actions/action`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: automated_actions/automated-action-example.png
|
||||
:align: center
|
||||
:alt: Example of an automated action on the Subscription model
|
||||
|
||||
.. _studio/automated-actions/model:
|
||||
|
||||
Model
|
||||
=====
|
||||
|
||||
Select the model where the automated action should be applied.
|
||||
|
||||
.. note::
|
||||
The model you are on when you click on :guilabel:`Automations` is pre-selected by default.
|
||||
|
||||
.. _studio/automated-actions/trigger:
|
||||
|
||||
Trigger
|
||||
=======
|
||||
|
||||
Define when the automated action should be applied. Six triggers are available.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-creation:
|
||||
|
||||
On Creation
|
||||
-----------
|
||||
|
||||
The action is triggered when a record is created and then saved.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-update:
|
||||
|
||||
On Update
|
||||
---------
|
||||
|
||||
The action is triggered when a previously saved record is edited and then saved.
|
||||
|
||||
- Use :guilabel:`Trigger Fields` to specify which fields - and only those - trigger the action on
|
||||
their update.
|
||||
- To detect when a record changes from one state to another, define a :guilabel:`Before Update
|
||||
Domain` filter, which checks if the condition is satisfied before the record is updated. Then set
|
||||
an :ref:`studio/automated-actions/apply-on` filter, which checks if the condition is met after the
|
||||
record is updated.
|
||||
|
||||
.. example::
|
||||
If you want the automated action to happen when an email address is set on a contact, define
|
||||
the :guilabel:`Before Update Domain` to `Email is not set`, and the :guilabel:`Apply on`
|
||||
domain to `Email is set`.
|
||||
|
||||
.. image:: automated_actions/on-update-trigger-example.png
|
||||
:align: center
|
||||
:alt: Example of an On Update trigger
|
||||
|
||||
.. _studio/automated-actions/trigger/on-creation-update:
|
||||
|
||||
On Creation & Update
|
||||
--------------------
|
||||
|
||||
The action is triggered when a record is created and saved or edited afterward and saved.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-deletion:
|
||||
|
||||
On Deletion
|
||||
-----------
|
||||
|
||||
The action is triggered when a record is deleted.
|
||||
|
||||
.. note::
|
||||
This trigger is rarely used, as archiving records is usually preferred to deletion.
|
||||
|
||||
.. _studio/automated-actions/trigger/form-modification:
|
||||
|
||||
Based on Form Modification
|
||||
--------------------------
|
||||
|
||||
The action is triggered when any change is done to a trigger field's value on the :ref:`Form view
|
||||
<studio/views/general/form>`, even before saving the record. This trigger only works on the user
|
||||
interface when a modification is made by a user. If the field is changed through another action and
|
||||
not by the user, the action will not run.
|
||||
|
||||
.. note::
|
||||
This trigger can only be used with the :ref:`Execute Python Code action
|
||||
<studio/automated-actions/action/python-code>`, so development is required.
|
||||
|
||||
.. _studio/automated-actions/trigger/timed-condition:
|
||||
|
||||
Based on Timed Condition
|
||||
------------------------
|
||||
|
||||
The action is triggered when a trigger field's date or date & time value is reached.
|
||||
|
||||
- To trigger the action after the :guilabel:`Trigger Date`, add a number of minutes, hours, days, or
|
||||
months under :guilabel:`Delay after trigger date`. To trigger the action before, add a negative
|
||||
number instead.
|
||||
|
||||
.. example::
|
||||
If you want to send a reminder email 30 minutes before the start of a calendar event, select
|
||||
the :guilabel:`Start (Calendar Event)` under :guilabel:`Trigger Date` and set the
|
||||
:guilabel:`Delay after trigger date` to **-30** :guilabel:`Minutes`.
|
||||
|
||||
.. image:: automated_actions/timed-condition-trigger-example.png
|
||||
:align: center
|
||||
:alt: Example of a Based on Timed Condition trigger
|
||||
|
||||
.. note::
|
||||
By default, the scheduler checks for trigger dates every 4 hours.
|
||||
|
||||
.. _studio/automated-actions/apply-on:
|
||||
|
||||
Apply on
|
||||
========
|
||||
|
||||
Define on which records of the model the automated action should be applied. It works the same way
|
||||
as when you apply filters on a model.
|
||||
|
||||
.. _studio/automated-actions/action:
|
||||
|
||||
Action
|
||||
======
|
||||
|
||||
Determine what the automated action should do (server action). There are eight types of action to
|
||||
choose from.
|
||||
|
||||
.. _studio/automated-actions/action/python-code:
|
||||
|
||||
Execute Python Code
|
||||
-------------------
|
||||
|
||||
The action is used to execute Python code. The available variables are described on the
|
||||
:guilabel:`Python Code` tab, which is also used to write your code, or on the :guilabel:`Help` tab.
|
||||
|
||||
- To allow the action to be run through the website, tick :guilabel:`Available on the Website` and
|
||||
add a :guilabel:`Website Path`.
|
||||
|
||||
.. _studio/automated-actions/action/new-record:
|
||||
|
||||
Create a new Record
|
||||
-------------------
|
||||
|
||||
The action is used to create a new record on any model.
|
||||
|
||||
.. note::
|
||||
Selecting a :guilabel:`Target Model` is only required if you want to target another model than
|
||||
the one you are on.
|
||||
|
||||
- To link the record that triggered the creation of the new record, select a field under
|
||||
:guilabel:`Link Field`. For example, you could create a contact automatically when a lead is
|
||||
turned into an opportunity.
|
||||
- :guilabel:`Data to Write` tab: the tab is used to specify the new record's values. After selecting
|
||||
a :guilabel:`Field`, select its :guilabel:`Evaluation Type`:
|
||||
|
||||
- :guilabel:`Value`: used to directly give the field's raw value in the :guilabel:`Value` column.
|
||||
- :guilabel:`Reference`: used to select the record under the :guilabel:`Record` column and let
|
||||
Studio add the internal ID in the :guilabel:`Value` column.
|
||||
|
||||
.. example::
|
||||
If an automated action creates a new task in a project, you can assign it to a specific user
|
||||
by setting the :guilabel:`Field` to :guilabel:`Responsible User (Project)`, the
|
||||
:guilabel:`Evaluation Type` to :guilabel:`Reference`, and the :guilabel:`Record` to a
|
||||
specific user.
|
||||
|
||||
.. image:: automated_actions/new-record-example.png
|
||||
:align: center
|
||||
:alt: Example of a Create a new Record action
|
||||
|
||||
- :guilabel:`Python expression`: used to dynamically define the newly created record’s value for a
|
||||
field using Python code in the :guilabel:`Value` column.
|
||||
|
||||
.. _studio/automated-actions/action/update-record:
|
||||
|
||||
Update the Record
|
||||
-----------------
|
||||
|
||||
The action is used to set value(s) for field(s) of any record on the current model.
|
||||
|
||||
.. note::
|
||||
The process to fill in the :guilabel:`Data to Write` tab is the same as described under
|
||||
:ref:`studio/automated-actions/action/new-record`.
|
||||
|
||||
.. _studio/automated-actions/action/several-actions:
|
||||
|
||||
Execute several actions
|
||||
-----------------------
|
||||
|
||||
The action is used to trigger multiple actions at the same time. To do so, click on :guilabel:`Add a
|
||||
line` under the :guilabel:`Actions` tab. In the :guilabel:`Child Actions` pop-up, click on
|
||||
:guilabel:`Create` and configure the action.
|
||||
|
||||
.. _studio/automated-actions/action/send-email:
|
||||
|
||||
Send Email
|
||||
----------
|
||||
|
||||
The action is used to send an email to a contact linked to a specific record. To do so, select or
|
||||
create an :guilabel:`Email Template`.
|
||||
|
||||
.. _studio/automated-actions/action/add-followers:
|
||||
|
||||
Add Followers
|
||||
-------------
|
||||
|
||||
The action is used to subscribe existing contacts to the record.
|
||||
|
||||
.. _studio/automated-actions/action/next-activity:
|
||||
|
||||
Create Next Activity
|
||||
--------------------
|
||||
|
||||
The action is used to schedule a new activity linked to the record. Use the :guilabel:`Activity` tab
|
||||
to set it up as usual, but instead of the :guilabel:`Assigned to` field, select an
|
||||
:guilabel:`Activity User Type`. Select :guilabel:`Specific User` and add the user under
|
||||
:guilabel:`Responsible` if the activity should always be assigned to the same user. To dynamically
|
||||
target a user linked to the record, select :guilabel:`Generic User From Record` instead and change
|
||||
the :guilabel:`User field name` if necessary.
|
||||
|
||||
.. example::
|
||||
After a lead is turned into an opportunity, you want your automated action to set up a call for
|
||||
the user responsible for the lead. To do so, set the :guilabel:`Activity` to :guilabel:`Call`
|
||||
and set the :guilabel:`Activity User Type` to :guilabel:`Generic User From Record`.
|
||||
|
||||
.. image:: automated_actions/next-activity-example.png
|
||||
:align: center
|
||||
:alt: Example of a Create Next Activity action
|
||||
|
||||
.. _studio/automated-actions/action/send-sms:
|
||||
|
||||
Send SMS Text Message
|
||||
---------------------
|
||||
|
||||
The action is used to send an SMS to a contact linked to the record. To do so, select or create an
|
||||
:guilabel:`SMS Template`.
|
||||
|
||||
.. tip::
|
||||
If you want sent messages to be logged in the Chatter, tick :guilabel:`Log as Note`.
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
11
content/applications/productivity/studio/concepts.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
:nosearch:
|
||||
|
||||
========
|
||||
Concepts
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
concepts/understanding_general
|
||||
concepts/understanding_automated_actions
|
||||
@@ -0,0 +1,77 @@
|
||||
===============================
|
||||
Understanding Automated Actions
|
||||
===============================
|
||||
|
||||
| Automated actions are used to trigger actions. They are based on conditions and happen on top of
|
||||
Odoo’s default business logic.
|
||||
| Examples of automated actions include: creating a next activity upon a quote's confirmation;
|
||||
adding a user as a follower of a confirmed invoice if its total is higher than a
|
||||
certain amount; or preventing a lead from changing stage if a field is not filled in.
|
||||
|
||||
.. image:: understanding_automated_actions/automated_action_flow.png
|
||||
:align: center
|
||||
:height: 270
|
||||
:alt: Flowchart to exemplify an automated action rule for Odoo Studio
|
||||
|
||||
| Let's understand how to properly define *when* an automated action runs and *how* to create one:
|
||||
| The first step is to choose the :doc:`Model <understanding_general>` on which the action is
|
||||
applied.
|
||||
| The **Trigger** field defines the event that causes the automated action to happen:
|
||||
|
||||
- *On Creation*: when a new record is created. Note that the record is created once saved for the
|
||||
first time.
|
||||
- *On Update*: when the record is updated. Note that the update happens once the record is saved.
|
||||
- *On Creation & Update*: on the creation and/or on the update of a record once the form is saved.
|
||||
- *On Deletion*: on the removal of a record under the condition set.
|
||||
- *Based on Form Modification*: when the value of the specified *Trigger* field is changed in the
|
||||
interface (user sees the changes before saving the record). Note that this action can only be used
|
||||
with the *Execute Python Code* action type.
|
||||
- *Based on Timed Condition*: a delay happens after a specific date/time. Set a *Delay after trigger
|
||||
date* if you need a delay to happen before the *Trigger Date*. Example: to send a reminder 15min
|
||||
before a meeting. If the date/time is not set on the form of the model chosen, the date/time
|
||||
considered is the one of the creation/update of the record.
|
||||
|
||||
For every Trigger option, **conditions** can be applied, such as:
|
||||
|
||||
- *Before Update Domain*: if designated, this condition must be satisfied before the record is
|
||||
updated.
|
||||
- *Apply on*: if designated, this condition must be satisfied before executing the action rule
|
||||
(*Action To Do*), and after the update.
|
||||
|
||||
| The **Active** option is to be turned off when the rule should be hidden and not executed.
|
||||
| Under **Action To Do** choose the type of server action that must be executed once records meet
|
||||
the *Trigger* conditions:
|
||||
|
||||
- *Execute Python Code*: a block of code is executed. A *Help* tab with the variables that can be
|
||||
used is available.
|
||||
- *Create New Record*: a new record with new values is created.
|
||||
- *Update a Record*: updates the record that triggered the action.
|
||||
- *Execute several actions*: defines an action that triggers other server actions.
|
||||
- *Send Email*: an automatic :doc:`email </applications/general/email_communication/email_template>` is sent.
|
||||
- *Add Followers*: followers are notified of changes in the task.
|
||||
- *Create Next Activity*: creates an activity such as: *Call*, *Email*, *Reminder*.
|
||||
- *Send SMS Text Message*: sends an :doc:`SMS </applications/marketing/sms_marketing/pricing/pricing_and_faq>`.
|
||||
|
||||
Example
|
||||
~~~~~~~
|
||||
|
||||
This is the process of which the update of the *Email* field on the Lead/Opportunity *Model*, with a
|
||||
*Trigger Condition* set to *On Update*, goes through:
|
||||
|
||||
.. image:: understanding_automated_actions/action_update_lead_example.png
|
||||
:align: center
|
||||
:alt: View of an automated action being created in Odoo Studio
|
||||
|
||||
#. The user creates the record without an email address set.
|
||||
#. The user updates the record defining an email address.
|
||||
#. Once the change is saved, the automation checks if any of the *Watched Fields* are being updated
|
||||
(for the example: field name *email_from* (Email).
|
||||
#. If true, it checks if the record matches the *Before Update Domain* (for the example: *email
|
||||
is not set*).
|
||||
#. If true, it checks (*after the update*) whether the record matches the *Apply on* domain (for the
|
||||
example: *email is set*).
|
||||
#. If true, the chosen *Action To Do* is performed on the record.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`understanding_general`
|
||||
- :doc:`../use_cases/automated_actions`
|
||||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
@@ -0,0 +1,95 @@
|
||||
==============================
|
||||
Understanding General Concepts
|
||||
==============================
|
||||
|
||||
| Odoo Studio is a toolbox that allows you to add models or adapt functionalities on top of Odoo’s
|
||||
standard behavior without coding knowledge. You can also create custom views and modify existing
|
||||
ones without having to get into the XML code.
|
||||
| Even for experienced developers, typing out code requires time. By using Odoo Studio, you can
|
||||
quickly get your models up and going and focus on the crucial parts of your application. The
|
||||
result is a user-friendly solution that makes customizations and designing new applications easy
|
||||
with or without programming skills.
|
||||
|
||||
|
||||
Getting started
|
||||
===============
|
||||
|
||||
One you start using Odoo Studio, you automatically create a new *module* that contains all your
|
||||
modifications. These modifications can be done on existing screens (*views*), by adding new
|
||||
*fields* in existing applications, or by creating an entirely new *model*.
|
||||
|
||||
What is a Module?
|
||||
-----------------
|
||||
|
||||
| An Odoo **Module** can contain a number of elements, such as: business objects (models), object
|
||||
views, data files, web controllers, and static web data. An application is a collection of modules.
|
||||
| In object-oriented programming, models usually represent a concept from the real world.
|
||||
Example: Odoo has models for Sales Orders, Users, Countries, etc. If you were to build an
|
||||
application to manage Real Estate sales, a model that represents the Properties for sale would
|
||||
probably be your first step.
|
||||
|
||||
.. image:: understanding_general/new_app.png
|
||||
:align: center
|
||||
:alt: Overview of the main dashboard emphasizing the option to create a new app in Odoo Studio
|
||||
|
||||
.. _studio/concepts/understanding_general/models:
|
||||
|
||||
What is a Model (also called Object)?
|
||||
-------------------------------------
|
||||
|
||||
A **Model** determines the logical structure of a database and fundamentally determines in which
|
||||
manner data can be stored, organized, and manipulated. In other words, a model is a table of
|
||||
information that can be bridged with other tables.
|
||||
|
||||
What are Fields?
|
||||
----------------
|
||||
|
||||
| **Fields** compose models. It is where a record (a piece of data) is registered.
|
||||
| Example: on the Real Estate application, fields on the Properties model would include
|
||||
the price, address, a picture, a link to the current owner, etc.
|
||||
| There are 2 main types of fields in Odoo: *basic (or scalar) fields* and *relational fields*.
|
||||
| Basic fields represent simple values, like numbers or text. Relational fields represent relations
|
||||
between models. So, if you have a model for *Customers* and another one for *Properties*, you
|
||||
would use a relational field to link each Property to its Customer.
|
||||
|
||||
Relational Fields in detail
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
| **Relational Fields** provide the option to link the data of one model with the data of another
|
||||
model.
|
||||
| In Odoo, relational field types are: *One2many*, *Many2one*, *Many2many*.
|
||||
|
||||
.. image:: understanding_general/relational_fields.png
|
||||
:align: center
|
||||
:alt: Tables with a visual explanation of related fields for Odoo Studio
|
||||
|
||||
| An **One2many** field is a *one-way* direction of selecting *multiple* records from a table.
|
||||
| Example: a Sales Order can contain multiple Sales Order Lines, which also contain multiple fields
|
||||
of information.
|
||||
| A **Many2one** field is a *one-way* direction of selecting *one* record from a table.
|
||||
| Example: you can have many product categories, but each product can only belong to one category.
|
||||
| A **Many2many** field is a *two-way* direction of selecting records from a table.
|
||||
| Example: multiple tags can be added to a lead’s form.
|
||||
|
||||
.. note::
|
||||
An *One2many* field must have a *Many2one* related to it.
|
||||
|
||||
What are Views?
|
||||
---------------
|
||||
|
||||
**Views** define how records are displayed. They are specified in XML which means that they can be
|
||||
edited independently from the models that they represent. There are various types of views in Odoo,
|
||||
and each of them represents a mode of visualization. Some examples are: *form*, *list*, *kanban*.
|
||||
|
||||
What is a Menu?
|
||||
---------------
|
||||
|
||||
A **Menu** is a button that executes an action. In Odoo Studio, to create menus (models) and
|
||||
rearrange their hierarchy, click on *Edit Menu*.
|
||||
|
||||
.. image:: understanding_general/edit_menu.png
|
||||
:align: center
|
||||
:alt: Overview of a menu being edit in Odoo Studio
|
||||
|
||||
.. seealso::
|
||||
- `Studio Basics <https://www.odoo.com/fr_FR/slides/studio-31>`_
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -1,493 +0,0 @@
|
||||
==================
|
||||
Fields and widgets
|
||||
==================
|
||||
|
||||
Fields structure the models of a database. If you picture a model as a table or spreadsheet, fields
|
||||
are the columns where data is stored in the records (i.e., the rows). Fields also define the type of
|
||||
data that is stored within them. How the data is presented and formatted on the :abbr:`UI (User
|
||||
Interface)` is defined by their widget.
|
||||
|
||||
From a technical point of view, there are 15 field types in Odoo. However, you can choose from 20
|
||||
fields in Studio, as some field types are available more than once with a different default widget.
|
||||
|
||||
.. tip::
|
||||
:guilabel:`New Fields` can only be added to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views. On other views, you can only add
|
||||
:guilabel:`Existing Fields` :dfn:`(fields already on the model)`.
|
||||
|
||||
.. _studio/fields/simple-fields:
|
||||
|
||||
Simple fields
|
||||
=============
|
||||
|
||||
Simple fields contain basic values, such as text, numbers, files, etc.
|
||||
|
||||
.. note::
|
||||
Non-default widgets, when available, are presented as bullet points below.
|
||||
|
||||
.. _studio/fields/simple-fields/text:
|
||||
|
||||
Text (`char`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Text` field is used for short text containing any character. One text line is
|
||||
displayed when filling out the field.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Copy to Clipboard`: users can copy the value by clicking a button.
|
||||
- :guilabel:`E-mail`: the value becomes a clickable *mailto* link.
|
||||
- :guilabel:`Image`: displays an image using a URL. The value cannot be edited manually, but a
|
||||
default value can be set.
|
||||
|
||||
.. note::
|
||||
This works differently than selecting the :ref:`Image field
|
||||
<studio/fields/simple-fields/image>` directly, as the image is not stored in Odoo when using a
|
||||
:guilabel:`Text` field with the :guilabel:`Image` widget. For example, it can be useful if you
|
||||
want to save disk space.
|
||||
|
||||
- :guilabel:`Phone`: the value becomes a clickable *tel* link.
|
||||
|
||||
.. tip::
|
||||
Tick :guilabel:`Enable SMS` to add an option to send an SMS directly from Odoo next to the
|
||||
field.
|
||||
|
||||
- :guilabel:`URL`: the value becomes a clickable URL.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/text-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Text fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/multiline-text:
|
||||
|
||||
Multiline Text (`text`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Multiline Text` field is used for longer text containing any type of character. Two
|
||||
text lines are displayed on the UI when filling out the field.
|
||||
|
||||
- :guilabel:`Copy to Clipboard`: users can copy the value by clicking a button.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/multiline-text-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Multiline Text fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/integer:
|
||||
|
||||
Integer (`integer`)
|
||||
-------------------
|
||||
|
||||
The :guilabel:`Integer` field is used for all integer numbers (:dfn:`positive, negative, or zero,
|
||||
without a decimal`).
|
||||
|
||||
- :guilabel:`Percentage Pie`: displays the value inside a percentage circle, usually for a computed
|
||||
value. The value cannot be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Progress Bar`: displays the value next to a percentage bar, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Handle`: displays a drag handle icon to order records manually in :ref:`List view
|
||||
<studio/views/multiple-records/list>`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/integer-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Integer fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/decimal:
|
||||
|
||||
Decimal (`float`)
|
||||
-----------------
|
||||
|
||||
The :guilabel:`Decimal` field is used for all decimal numbers (:dfn:`positive, negative, or zero,
|
||||
with a decimal`).
|
||||
|
||||
.. note::
|
||||
Decimal numbers are displayed with two decimals after the decimal point on the UI, but they are
|
||||
stored in the database with more precision.
|
||||
|
||||
- :guilabel:`Monetary`: it is similar to using the :ref:`Monetary field
|
||||
<studio/fields/simple-fields/monetary>`. It is recommended to use the later as it offers more
|
||||
functionalities.
|
||||
- :guilabel:`Percentage`: displays a percent character `%` after the value.
|
||||
- :guilabel:`Percentage Pie`: displays the value inside a percentage circle, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Progress Bar`: displays the value next to a percentage bar, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Time`: the value must follow the *hh:mm* format, with a maximum of 59 minutes.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/decimal-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Decimal fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/monetary:
|
||||
|
||||
Monetary (`monetary`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`Monetary` field is used for all monetary values.
|
||||
|
||||
.. note::
|
||||
When you first add a :guilabel:`Monetary` field, you are prompted to add a :guilabel:`Currency`
|
||||
field if none exists already on the model. Odoo offers to add the :guilabel:`Currency` field for
|
||||
you. Once it is added, add the :guilabel:`Monetary` field again.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/monetary-example.png
|
||||
:align: center
|
||||
:alt: Example of a Monetary field along with its Currency field
|
||||
|
||||
.. _studio/fields/simple-fields/html:
|
||||
|
||||
Html (`html`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Html` field is used to add text that can be edited using the Odoo HTML editor.
|
||||
|
||||
- :guilabel:`Multiline Text`: disables the Odoo HTML editor to allow editing raw HTML.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/html-example.png
|
||||
:align: center
|
||||
:alt: Examples of Html fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/date:
|
||||
|
||||
Date (`date`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Date` field is used to select a date on a calendar.
|
||||
|
||||
- :guilabel:`Remaining Days`: the remaining number of days before the selected date is displayed
|
||||
(e.g., *In 5 days*), based on the current date.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/date-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Date fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/date-time:
|
||||
|
||||
Date & Time (`datetime`)
|
||||
------------------------
|
||||
|
||||
The :guilabel:`Date & Time` field is used to select a date on a calendar and a time on a clock. The
|
||||
user's current time is automatically used if no time is set.
|
||||
|
||||
- :guilabel:`Date`: used to record the time without displaying it on the UI.
|
||||
- :guilabel:`Remaining days`: displays the remaining number of days before the selected date (e.g.,
|
||||
*In 5 days*), based on the current date and time.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/date-time-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Date & Time fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/checkbox:
|
||||
|
||||
Checkbox (`boolean`)
|
||||
--------------------
|
||||
|
||||
The :guilabel:`Checkbox` field is used when a value should only be true or false, indicated by
|
||||
checking or unchecking a checkbox.
|
||||
|
||||
- :guilabel:`Button`: displays a radio button. The widget works without switching to the edit mode.
|
||||
- :guilabel:`Toggle`: displays a toggle button. The widget works without switching to the edit mode.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/checkbox-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Checkbox fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/selection:
|
||||
|
||||
Selection (`selection`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Selection` field is used when users should select a single value from a group of
|
||||
predefined values.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Badges`: displays all selectable values simultaneously inside rectangular shapes,
|
||||
organized horizontally.
|
||||
- :guilabel:`Priority`: displays star symbols instead of values, which can be used to indicate an
|
||||
importance or satisfaction level, for example. This has the same effect as selecting the
|
||||
:ref:`Priority field <studio/fields/simple-fields/priority>`, although, for the latter, four
|
||||
priority values are already predefined.
|
||||
- :guilabel:`Radio`: displays all selectable values at the same time as radio buttons.
|
||||
|
||||
.. tip::
|
||||
By default, radio buttons are organized vertically. Tick :guilabel:`display horizontally` to
|
||||
switch the way they are displayed.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/selection-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Selection fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/priority:
|
||||
|
||||
Priority (`selection`)
|
||||
----------------------
|
||||
|
||||
The :guilabel:`Priority` field is used to display a three-star rating system, which can be used to
|
||||
indicate importance or satisfaction level. This field type is a :ref:`Selection field
|
||||
<studio/fields/simple-fields/selection>` with the :guilabel:`Priority` widget selected by default
|
||||
and four priority values predefined. Consequently, the :guilabel:`Badge`, :guilabel:`Badges`,
|
||||
:guilabel:`Radio`, and :guilabel:`Selection` widgets have the same effects as described under
|
||||
:ref:`Selection <studio/fields/simple-fields/selection>`.
|
||||
|
||||
.. tip::
|
||||
To change the number of available stars by adding or removing values, click :guilabel:`Edit
|
||||
Values`. Note that the first value is equal to 0 stars (i.e., when no selection is made), so
|
||||
having four values results in a three-star rating system, for example.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/priority-example.png
|
||||
:align: center
|
||||
:alt: Example of a Priority field
|
||||
|
||||
.. _studio/fields/simple-fields/file:
|
||||
|
||||
File (`binary`)
|
||||
---------------
|
||||
|
||||
The :guilabel:`File` field is used to upload any type of file, or sign a form (:guilabel:`Sign`
|
||||
widget).
|
||||
|
||||
- :guilabel:`Image`: users can upload an image file, which is then displayed in :ref:`Form view
|
||||
<studio/views/general/form>`. This has the same effect as using the :ref:`Image field
|
||||
<studio/fields/simple-fields/image>`.
|
||||
- :guilabel:`PDF Viewer`: users can upload a PDF file, which can be then browsed from the
|
||||
:ref:`Form view <studio/views/general/form>`.
|
||||
- :guilabel:`Sign`: users can electronically sign the form. This has the same effect as selecting
|
||||
the :ref:`Sign field <studio/fields/simple-fields/sign>`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/file-examples.png
|
||||
:align: center
|
||||
:alt: Examples of File fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/image:
|
||||
|
||||
Image (`binary`)
|
||||
----------------
|
||||
|
||||
The :guilabel:`Image` field is used to upload an image and display it in :ref:`Form view
|
||||
<studio/views/general/form>`. This field type is a :ref:`File field
|
||||
<studio/fields/simple-fields/file>` with the :guilabel:`Image` widget selected by default.
|
||||
Consequently, the :guilabel:`File`, :guilabel:`PDF Viewer`, and :guilabel:`Sign` widgets have the
|
||||
same effects as described under :ref:`File <studio/fields/simple-fields/file>`.
|
||||
|
||||
.. tip::
|
||||
To change the display size of uploaded images, select :guilabel:`Small`, :guilabel:`Medium`, or
|
||||
:guilabel:`Large` under the :guilabel:`Size` option.
|
||||
|
||||
.. _studio/fields/simple-fields/sign:
|
||||
|
||||
Sign (`binary`)
|
||||
---------------
|
||||
|
||||
The :guilabel:`Sign` field is used to sign the form electronically. This field type is a :ref:`File
|
||||
field <studio/fields/simple-fields/file>` with the :guilabel:`Sign` widget selected by default.
|
||||
Consequently, the :guilabel:`File`, :guilabel:`Image`, and :guilabel:`PDF Viewer` widgets have the
|
||||
same effects as described under :ref:`File <studio/fields/simple-fields/file>`.
|
||||
|
||||
.. tip::
|
||||
To give users the :guilabel:`Auto` option when having to draw their signature, select one of the
|
||||
available :guilabel:`Auto-complete with` fields (:ref:`Text <studio/fields/simple-fields/text>`,
|
||||
:ref:`Many2One <studio/fields/relational-fields/many2one>`, and :ref:`Related Field
|
||||
<studio/fields/relational-fields/related-field>` on the model only). The signature is
|
||||
automatically generated using the data from the selected field.
|
||||
|
||||
.. _studio/fields/relational-fields:
|
||||
|
||||
Relational fields
|
||||
=================
|
||||
|
||||
Relational fields are used to link and display the data from records on another model.
|
||||
|
||||
.. note::
|
||||
Non-default widgets, when available, are presented as bullet points below.
|
||||
|
||||
.. _studio/fields/relational-fields/many2one:
|
||||
|
||||
Many2One (`many2one`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`Many2One` field is used to link another record (from another model) to the record
|
||||
being edited. The record's name from the other model is then displayed on the record being edited.
|
||||
|
||||
.. example::
|
||||
On the *Sales Order* model, the :guilabel:`Customer` field is a :guilabel:`Many2One` field
|
||||
pointing at the *Contact* model. This allows **many** sales orders to be linked to **one**
|
||||
contact (customer).
|
||||
|
||||
.. image:: fields/many2one-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing a many2one relationship
|
||||
|
||||
.. tip::
|
||||
- To prevent users from creating a new record in the linked model, tick :guilabel:`Disable
|
||||
creation`.
|
||||
- To prevent users from opening records in a pop-up window, tick :guilabel:`Disable opening`.
|
||||
- To help users only select the right record, click on :guilabel:`Domain` to create a filter.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI.
|
||||
- :guilabel:`Radio`: displays all selectable values at the same time as radio buttons.
|
||||
|
||||
.. _studio/fields/relational-fields/one2many:
|
||||
|
||||
One2Many (`one2many`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`One2Many` field is used to display the existing relations between a record on the
|
||||
current model and multiple records from another model.
|
||||
|
||||
.. example::
|
||||
You could add a :guilabel:`One2Many` field on the *Contact* model to look at **one** customer's
|
||||
**many** sales orders.
|
||||
|
||||
.. image:: fields/one2many-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing a one2many relationship
|
||||
|
||||
.. note::
|
||||
To use a :guilabel:`One2Many` field, the two models must have been linked already using a
|
||||
:ref:`Many2One field <studio/fields/relational-fields/many2one>`. One2Many relations do not exist
|
||||
independently: a reverse-search of existing Many2One relations is performed.
|
||||
|
||||
.. _studio/fields/relational-fields/lines:
|
||||
|
||||
Lines (`one2many`)
|
||||
------------------
|
||||
|
||||
The :guilabel:`Lines` field is used to create a table with rows and columns (e.g., the lines of
|
||||
products on a sales order).
|
||||
|
||||
.. tip::
|
||||
To modify the columns, click on the :guilabel:`Lines` field and then :guilabel:`Edit List View`.
|
||||
To edit the form that pops up when a user clicks on :guilabel:`Add a line`, click on
|
||||
:guilabel:`Edit Form View` instead.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/lines-example.png
|
||||
:align: center
|
||||
:alt: Example of a Lines field
|
||||
|
||||
.. _studio/fields/relational-fields/many2many:
|
||||
|
||||
Many2Many (`many2many`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Many2Many` field is used to link multiple records from another model to multiple
|
||||
records on the current model. Many2Many fields can use :guilabel:`Disable creation`,
|
||||
:guilabel:`Disable opening`, :guilabel:`Domain`, just like :ref:`Many2One fields
|
||||
<studio/fields/relational-fields/many2one>`.
|
||||
|
||||
.. example::
|
||||
On the *Task* model, the :guilabel:`Assignees` field is a :guilabel:`Many2Many` field pointing at
|
||||
the *Contact* model. This allows a single user to be assigned to **many** tasks and **many**
|
||||
users to be assigned to a single task.
|
||||
|
||||
.. image:: fields/many2many-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing many2many relationships
|
||||
|
||||
- :guilabel:`Checkboxes`: users can select several values using checkboxes.
|
||||
- :guilabel:`Tags`: users can select several values appearing in rounded shapes, also known as
|
||||
*tags*. This has the same effect as selecting the :ref:`Tags field
|
||||
<studio/fields/relational-fields/tags>`.
|
||||
|
||||
.. _studio/fields/relational-fields/tags:
|
||||
|
||||
Tags (`many2many`)
|
||||
------------------
|
||||
|
||||
The :guilabel:`Tags` field is used to display several values from another model appearing in rounded
|
||||
shapes, also known as *tags*. This field type is a :ref:`Many2Many field
|
||||
<studio/fields/relational-fields/many2many>` with the :guilabel:`Tags` widget selected by default.
|
||||
Consequently, the :guilabel:`Checkboxes` and :guilabel:`Many2Many` widgets have the same effects as
|
||||
described under :ref:`Many2Many <studio/fields/relational-fields/many2many>`.
|
||||
|
||||
.. tip::
|
||||
To display tags with different background colors, tick :guilabel:`Use colors`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/tags-example.png
|
||||
:align: center
|
||||
:alt: Example of a Tags field
|
||||
|
||||
.. _studio/fields/relational-fields/related-field:
|
||||
|
||||
Related Field (`related`)
|
||||
-------------------------
|
||||
|
||||
A :guilabel:`Related Field` is not a relational field per se; no relationship is created between
|
||||
models. It uses an existing relationship to fetch and display information from another record.
|
||||
|
||||
.. example::
|
||||
To display the email address of a customer on the *Sales Order* model, use the :guilabel:`Related
|
||||
Field` `partner_id.email` by selecting :guilabel:`Customer` and then :guilabel:`Email`.
|
||||
|
||||
.. _studio/fields/properties:
|
||||
|
||||
Properties
|
||||
==========
|
||||
|
||||
- :guilabel:`Invisible`: When it is not necessary for users to view a field on the UI, tick
|
||||
:guilabel:`Invisible`. It helps clear the UI by only showing the essential fields depending on a
|
||||
specific situation.
|
||||
|
||||
.. example::
|
||||
On the *Form* view of the *Contact* model, the :guilabel:`Title` field only appears when
|
||||
:guilabel:`Individual` is selected, as that field would not be helpful for a
|
||||
:guilabel:`Company` contact.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Invisible` attribute also applies to Studio. To view hidden fields inside
|
||||
Studio, click on a view's :guilabel:`View` tab and tick :guilabel:`Show Invisible
|
||||
Elements`.
|
||||
|
||||
- :guilabel:`Required`: If a field should always be completed by the user before being able to
|
||||
proceed, tick :guilabel:`Required`.
|
||||
- :guilabel:`Read only`: If users should not be able to modify a field, tick :guilabel:`Read only`.
|
||||
|
||||
.. note::
|
||||
You can choose to apply these three properties only for specific records by clicking on
|
||||
:guilabel:`Conditional` and creating a filter.
|
||||
|
||||
- :guilabel:`Label`: The :guilabel:`Label` is the field's name on the UI.
|
||||
|
||||
.. note::
|
||||
This is not the same name as used in the PostgreSQL database. To view and change the latter,
|
||||
activate the :ref:`Developer mode <developer-mode>`, and edit the :guilabel:`Technical Name`.
|
||||
|
||||
- :guilabel:`Help Tooltip`: To explain the purpose of a field, write a description under
|
||||
:guilabel:`Help Tooltip`. It is displayed inside a tooltip box when hovering with your mouse over
|
||||
the field's label.
|
||||
- :guilabel:`Placeholder`: To provide an example of how a field should be completed, write it under
|
||||
:guilabel:`Placeholder`. It is displayed in light gray in lieu of the field's value.
|
||||
- :guilabel:`Widget`: To change the default appearance or functionality of a field, select one of
|
||||
the available widgets.
|
||||
- :guilabel:`Default value`: To add a default value to a field when a record is created, use
|
||||
:guilabel:`Default value`.
|
||||
- :guilabel:`Limit visibility to groups`: To limit which users can see the field, select a user
|
||||
access group.
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 16 KiB |
12
content/applications/productivity/studio/how_to.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
:nosearch:
|
||||
|
||||
======
|
||||
How To
|
||||
======
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
how_to/rainbow_man
|
||||
how_to/reports
|
||||
how_to/export_import
|
||||
@@ -0,0 +1,28 @@
|
||||
=========================
|
||||
Export and Import Modules
|
||||
=========================
|
||||
|
||||
When you do customizations in Odoo Studio, a new module is created in your database, making it easy
|
||||
to use Studio for prototyping.
|
||||
|
||||
To export these customizations, activate Studio on the main dashboard and, under the menu
|
||||
*Customizations*, click on *Export*. The default filename is *customizations.zip*.
|
||||
|
||||
.. image:: export_import/customizations_menu.png
|
||||
:align: center
|
||||
:alt: View of the menu customizations in Odoo Studio
|
||||
|
||||
| The module created contains the definition of custom models and fields, as well as the UI elements
|
||||
of any customization in an XML format.
|
||||
| To import and install the customizations in another instance, connect to the destination database,
|
||||
activate Studio and, under *Customizations*, click on *Import*.
|
||||
|
||||
.. image:: export_import/import_modules.png
|
||||
:align: center
|
||||
:alt: View of the import modules window for Odoo Studio
|
||||
|
||||
.. warning::
|
||||
Studio does not know which apps are customized (because the same view can be modified on
|
||||
different apps), therefore, it *does not* add the underlying modules as dependencies of the
|
||||
exported module. In other words, the applications installed on the source database should be
|
||||
installed on the destination database.
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,23 @@
|
||||
===========================
|
||||
Customizing the Rainbow Man
|
||||
===========================
|
||||
|
||||
The Rainbow Man in Odoo is an animation shown once the user completes certain tasks and clicks on
|
||||
certain buttons. It is a way to make the software fun to use, and rewarding, for employees.
|
||||
|
||||
.. image:: rainbow_man/crm_rainbow.png
|
||||
:align: center
|
||||
:alt: View of a sales form and the tab properties and its rainbow man field in Odoo Studio
|
||||
|
||||
| On most buttons in Odoo, such as *Send by Email*, *Confirm* or *Cancel*, once they are selected in
|
||||
Studio, under their *Properties*, the *Rainbow Man* effect can be applied.
|
||||
| By default, the feature is active:
|
||||
|
||||
- when opportunities are marked as won;
|
||||
- when users empty their inboxes;
|
||||
- when the user finishes a tour;
|
||||
- when the user finishes doing reconciliations.
|
||||
|
||||
.. image:: rainbow_man/properties_rainbow.png
|
||||
:align: center
|
||||
:alt: View of a sales form and the tab properties and its rainbow man field in Odoo Studio
|
||||
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 46 KiB |
72
content/applications/productivity/studio/how_to/reports.rst
Normal file
@@ -0,0 +1,72 @@
|
||||
===================
|
||||
Customizing Reports
|
||||
===================
|
||||
|
||||
| Odoo uses HTML and CSS technologies to create reports. HTML is a markup language that uses tags,
|
||||
also called elements. It is the core of any webpage because it provides its basic structure.
|
||||
CSS interacts with HTML elements to add style to the page, establishing how the HTML is shown to
|
||||
the user. Odoo’s reports also use Bootstrap’s grid layout, which is the containers, rows, and
|
||||
columns to align content, and support Odoo's website themes.
|
||||
| When creating a new report, choose the purpose of it and if you would like the report to include
|
||||
header and footer (company logo, name, address, phone, email address, etc.).
|
||||
|
||||
.. image:: reports/report_typing.png
|
||||
:align: center
|
||||
:alt: View of the types of new reports in Odoo Studio
|
||||
|
||||
Under the tab **Add**, you find the fields to be dragged and dropped to the view. *Fields*, *Data
|
||||
tables*, *Subtotal & Total*, and *Address Book* are dynamic elements (meaning that they need a
|
||||
:doc:`one2many or a many2many <../concepts/understanding_general>` related object). *Text*, *Title
|
||||
Block*, *Image*, and *Text in Cell* are static elements.
|
||||
|
||||
.. image:: reports/add_tab.png
|
||||
:align: center
|
||||
:alt: View of a report and the tab add in Odoo Studio
|
||||
|
||||
Once the element is added to the view, select it to see its **Options**. The first section shows the
|
||||
hierarchy of the selected object and its properties, allowing you to individually edit
|
||||
them. Fields with related objects have their directives shown on *Field Expression*.
|
||||
|
||||
.. image:: reports/options_tab.png
|
||||
:align: center
|
||||
:alt: View of a report and the tab options in Odoo Studio
|
||||
|
||||
| Under **Visible if**, define the rule(s) to set visibility conditions to fields.
|
||||
| Example: if choosing to display a product image, you could set a visibility rule to only display
|
||||
the ones that are *set* in the product form, avoiding having a plain icon when they are not set.
|
||||
| **Visible for** is used to set which :doc:`groups </applications/general/users>` can have access
|
||||
to specific elements in the report. **Limit visibility to groups**, under *Report*, sets the
|
||||
visibility of the report to specifics groups, meaning that users belonging to other groups do not
|
||||
see the same final document.
|
||||
|
||||
.. image:: reports/limit_visibility.png
|
||||
:align: center
|
||||
:alt: View of a report’s settings emphasizing the field limit visibility to groups in Odoo Studio
|
||||
|
||||
Under the **Report** tab, name your report, choose the paper format, and if the report should be
|
||||
added to the *Print* menu list on its respective document form.
|
||||
|
||||
.. image:: reports/print_menu.png
|
||||
:align: center
|
||||
:alt: View of an invoice form emphasizing the menu print for Odoo Studio
|
||||
|
||||
If activating the :ref:`developer mode <developer-mode>`, additional fields such as *Class* under
|
||||
*Options*, and *Reload from attachment* under *Report*, become visible.
|
||||
|
||||
- *Class*: add custom CSS classes to the selected element (e.g. Bootstrap classes such as
|
||||
*text-danger*).
|
||||
|
||||
- *Reload from attachment*: saves the report as an attachment of the document when printed. When the
|
||||
report is reprinted, it re-downloads that attachment instead of re-printing it.
|
||||
This means that if the underlying record (e.g. Invoice) changes when compared to the first
|
||||
impression, the report does not reflect the changes because they were done after the attachment was
|
||||
created. This is typically useful for reports linked to documents that should not change, such as
|
||||
Invoices.
|
||||
|
||||
.. tip::
|
||||
Actions in Odoo Studio can be undone until you *Close* the toolbox. Once you have closed Studio,
|
||||
changes can not be undone anymore.
|
||||
|
||||
.. image:: reports/undo_redo.png
|
||||
:align: center
|
||||
:alt: View of a report being built and emphasizing the undo and redo buttons in Odoo Studio
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 22 KiB |
@@ -1,227 +0,0 @@
|
||||
=========================
|
||||
Models, modules, and apps
|
||||
=========================
|
||||
|
||||
Models determine the logical structure of a database and how data is stored, organized, and
|
||||
manipulated. In other words, a model is a table of information that can be linked with other tables.
|
||||
A model usually represents a business concept, such as a *sales order*, *contact*, or *product*.
|
||||
|
||||
Modules and apps contain various elements, such as models, views, data files, web controllers, and
|
||||
static web data.
|
||||
|
||||
.. note::
|
||||
All apps are modules. Larger, standalone modules are typically referred to as apps, whereas other
|
||||
modules usually serve as add-ons to said apps.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features:
|
||||
|
||||
Suggested features
|
||||
==================
|
||||
|
||||
When you create a new model or app with Studio, you can choose to add up to 14 features to speed
|
||||
up the creation process. These features bundle fields, default settings, and views that are usually
|
||||
used together to provide some standard functionality. Most of these features can be added later on,
|
||||
but adding them from the start makes the model creation process much easier. Furthermore, these
|
||||
features interact together in some cases to increase their usefulness.
|
||||
|
||||
.. example::
|
||||
Creating a model with the :ref:`studio/models-modules-apps/suggested-features/picture` and
|
||||
:ref:`studio/models-modules-apps/suggested-features/pipeline-stages` features enabled adds the
|
||||
image in the card layout of the :ref:`Kanban view <studio/views/multiple-records/kanban>`.
|
||||
|
||||
.. image:: models_modules_apps/picture-pipeline-kanban.png
|
||||
:align: center
|
||||
:alt: Combination of the Picture and Pipeline stages features on the Kanban view
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/contact-details:
|
||||
|
||||
Contact details
|
||||
---------------
|
||||
|
||||
Selecting :guilabel:`Contact details` adds to the :ref:`Form view <studio/views/general/form>` a
|
||||
:ref:`Many2One field <studio/fields/relational-fields/many2one>` linked to the *Contact* model and
|
||||
two of its :ref:`Related Fields <studio/fields/relational-fields/related-field>`: :guilabel:`Phone`
|
||||
and :guilabel:`Email`. The :guilabel:`Contact` field is also added to the :ref:`List view
|
||||
<studio/views/multiple-records/list>`, and the :ref:`Map view <studio/views/multiple-records/map>`
|
||||
is activated.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: models_modules_apps/contact.png
|
||||
:align: center
|
||||
:alt: Contact details feature on the Form view
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/user-assignment:
|
||||
|
||||
User assignment
|
||||
---------------
|
||||
|
||||
Selecting :guilabel:`User assignment` adds to the :ref:`Form view <studio/views/general/form>` a
|
||||
:ref:`Many2One field <studio/fields/relational-fields/many2one>` linked to the *Contact* model, with
|
||||
the following :guilabel:`Domain`: `Share User is not set` to only allow the selection of *Internal
|
||||
Users*. In addition, the :guilabel:`many2one_avatar_user` widget is used to display the user's
|
||||
avatar. The :guilabel:`Responsible` field is also added to the :ref:`List view
|
||||
<studio/views/multiple-records/list>`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: models_modules_apps/user-assignment.png
|
||||
:align: center
|
||||
:alt: User assignment feature on the Form view
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/date-calendar:
|
||||
|
||||
Date & Calendar
|
||||
---------------
|
||||
|
||||
Selecting :guilabel:`Date & Calendar` adds to the :ref:`Form view <studio/views/general/form>` a
|
||||
:ref:`Date field <studio/fields/simple-fields/date>` and activates the :ref:`Calendar view
|
||||
<studio/views/timeline/calendar>`.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/date-range-gantt:
|
||||
|
||||
Date range & Gantt
|
||||
------------------
|
||||
|
||||
Selecting :guilabel:`Date range & Gantt` adds to the :ref:`Form view <studio/views/general/form>`
|
||||
two :ref:`Date fields <studio/fields/simple-fields/date>` next to each other: one to set a start
|
||||
date, the other to set an end date, using the :guilabel:`daterange` widget, and activates the
|
||||
:ref:`Gantt view <studio/views/timeline/gantt>`.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/pipeline-stages:
|
||||
|
||||
Pipeline stages
|
||||
---------------
|
||||
|
||||
Selecting :guilabel:`Pipeline stages` activates the :ref:`Kanban view
|
||||
<studio/views/multiple-records/kanban>`, adds several fields such as :ref:`Priority
|
||||
<studio/fields/simple-fields/priority>` and :guilabel:`Kanban State`, and three stages:
|
||||
:guilabel:`New`, :guilabel:`In Progress`, and :guilabel:`Done`. The :guilabel:`Pipeline status bar`
|
||||
and the :guilabel:`Kanban State` field are added to the :ref:`Form view
|
||||
<studio/views/general/form>`. The :guilabel:`Color` field is added to the :ref:`List view
|
||||
<studio/views/multiple-records/list>`.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Pipeline stages` feature can be added at a later stage.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/tags:
|
||||
|
||||
Tags
|
||||
----
|
||||
|
||||
Selecting :guilabel:`Tags` adds to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views a :ref:`Tags field
|
||||
<studio/fields/relational-fields/tags>`, creating a *Tag* model with preconfigured access rights in
|
||||
the process.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/picture:
|
||||
|
||||
Picture
|
||||
-------
|
||||
|
||||
Selecting :guilabel:`Picture` adds to the top-right of the :ref:`Form view
|
||||
<studio/views/general/form>` an :ref:`Image field <studio/fields/simple-fields/image>`.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Picture` feature can be added at a later stage.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/lines:
|
||||
|
||||
Lines
|
||||
-----
|
||||
|
||||
Selecting :guilabel:`Lines`: adds to the :ref:`Form view <studio/views/general/form>` a :ref:`Lines
|
||||
field <studio/fields/relational-fields/lines>` inside a :guilabel:`Tab` component.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/notes:
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
Selecting :guilabel:`Notes` adds to the :ref:`Form view <studio/views/general/form>` an :ref:`Html
|
||||
field <studio/fields/simple-fields/html>` using the full width of the form.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/monetary-value:
|
||||
|
||||
Monetary value
|
||||
--------------
|
||||
|
||||
Selecting :guilabel:`Monetary value` adds to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views a :ref:`Monetary field
|
||||
<studio/fields/simple-fields/monetary>`. The :ref:`studio/views/reporting/graph` and
|
||||
:ref:`studio/views/reporting/pivot` views are also activated.
|
||||
|
||||
.. note::
|
||||
A *Currency* field is added and hidden from the view.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/company:
|
||||
|
||||
Company
|
||||
-------
|
||||
|
||||
Selecting :guilabel:`Company` adds to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views a :ref:`Many2One field
|
||||
<studio/fields/relational-fields/many2one>` linked to the *Company* model.
|
||||
|
||||
.. note::
|
||||
This is only useful if you work in a multi-company environment.
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/custom-sorting:
|
||||
|
||||
Custom Sorting
|
||||
--------------
|
||||
|
||||
Selecting :guilabel:`Custom Sorting` adds to the :ref:`List view
|
||||
<studio/views/multiple-records/list>` a drag handle icon to manually reorder records.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/list-drag-handle.png
|
||||
:align: center
|
||||
:alt: Custom Sorting feature on the List view
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/chatter:
|
||||
|
||||
Chatter
|
||||
-------
|
||||
|
||||
Selecting :guilabel:`Chatter` adds to the :ref:`Form view <studio/views/general/form>` Chatter
|
||||
functionalities (sending messages, logging notes, and scheduling activities).
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Chatter` feature can be added at a later stage.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: models_modules_apps/chatter.png
|
||||
:align: center
|
||||
:alt: Chatter feature on the Form view
|
||||
|
||||
.. _studio/models-modules-apps/suggested-features/archiving:
|
||||
|
||||
Archiving
|
||||
---------
|
||||
|
||||
Selecting :guilabel:`Archiving` adds to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views the :guilabel:`Archive` action and hides archived
|
||||
records from searches and views by default.
|
||||
|
||||
.. _studio/export-import:
|
||||
|
||||
Export and import customizations
|
||||
================================
|
||||
|
||||
When you do any customization with Studio, a new module named :guilabel:`Studio customizations` is
|
||||
added to your database.
|
||||
|
||||
To export these customizations, go to :menuselection:`Main dashboard --> Studio --> Customizations
|
||||
--> Export` to download a ZIP file containing all customizations.
|
||||
|
||||
To import and install these customizations in another database, connect to the destination database
|
||||
and go to :menuselection:`Main dashboard --> Studio --> Customizations --> Import`, then upload
|
||||
the exported ZIP file before clicking on the :guilabel:`Import` button.
|
||||
|
||||
.. warning::
|
||||
Before importing, make sure the destination database contains the same apps and modules as the
|
||||
source database. Studio does not add the underlying modules as dependencies of the exported
|
||||
module.
|
||||
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
13
content/applications/productivity/studio/use_cases.rst
Normal file
@@ -0,0 +1,13 @@
|
||||
:nosearch:
|
||||
|
||||
=========
|
||||
Use Cases
|
||||
=========
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
use_cases/models_fields
|
||||
use_cases/filters_status_bar
|
||||
use_cases/automated_actions
|
||||
use_cases/views
|
||||
@@ -0,0 +1,26 @@
|
||||
=====================================
|
||||
Advanced Use Cases: Automated Actions
|
||||
=====================================
|
||||
|
||||
- **Case scenario 1: when a Belgian lead is created, a 3-stars priority should be automatically
|
||||
applied.**
|
||||
|
||||
Under *Automations*, click on *Create* and set the following rules:
|
||||
|
||||
- *Model*: Lead/Opportunity
|
||||
- *Active*: On
|
||||
- *Trigger*: On Creation & Update
|
||||
- *Apply on*: Country > Country Name = Belgium
|
||||
- *Action To Do*: Update the Record
|
||||
- *Data to Write*: Lead/Opportunity > Value > 3
|
||||
|
||||
.. image:: automated_actions/hight_priority_leads.png
|
||||
:align: center
|
||||
:alt: View of an automated action that sets a high priority to Belgian leads in Odoo Studio
|
||||
|
||||
.. tip::
|
||||
Check :doc:`this doc <filters_status_bar>` in order to have another automated action example.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../concepts/understanding_automated_actions`
|
||||
- :doc:`../concepts/understanding_general`
|
||||
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,61 @@
|
||||
==========================================
|
||||
Advanced Use Cases: Filters and Status Bar
|
||||
==========================================
|
||||
|
||||
- **Case scenario 1: on Sales, set a filter on Belgian customers and define it as the default one
|
||||
(the user should still be able to unset the filter).**
|
||||
|
||||
On your customer’s page, use *Filters* > *Add Custom Filter* to group customers by country. Now,
|
||||
under *Favorites*, *Save Current Search* enabling *Use by default* and *Save*.
|
||||
|
||||
.. image:: filters_status_bar/customer_filter.png
|
||||
:align: center
|
||||
:alt: View of a custom filter being set to be used by default in Odoo
|
||||
|
||||
On *Filter Rules* in Studio mode, select the respective filter and enable *Default Filter*.
|
||||
|
||||
.. image:: filters_status_bar/sales_default_filter.png
|
||||
:align: center
|
||||
:alt: View of a filter’s rule form emphasizing the field default filter in Odoo Studio
|
||||
|
||||
- **Case scenario 2: add a status bar on the product form to manage its life cycle. Set the values:
|
||||
‘Prototype’, ‘In use’ and ‘Deprecated’. By default, the Kanban view must be grouped by status.**
|
||||
|
||||
| On your product form, *Add a pipeline status bar* and name its values. Status bars are *selection*
|
||||
fields that give you the ability to follow a specific flow. They are useful to show you the
|
||||
progress that has been made.
|
||||
| On the *Views* menu, access *Kanban* and, under its *View* options, set the *Default Group by* as
|
||||
*Pipeline status bar*.
|
||||
|
||||
.. image:: filters_status_bar/add_pipeline.png
|
||||
:align: center
|
||||
:alt: Form view emphasizing the button add a pipeline bar in Odoo Studio
|
||||
|
||||
Now, open your product form and set the right status for that product. As you move products
|
||||
throughout stages (also through the product’s form), stages are shown in the Kanban view.
|
||||
|
||||
.. tip::
|
||||
To make modifications in the pipeline status bar, for example, remember to go back to *Form View*.
|
||||
|
||||
.. image:: filters_status_bar/form_view.png
|
||||
:align: center
|
||||
:alt: View of Studio emphasizing the form view button in Odoo Studio
|
||||
|
||||
- **Case scenario 2.a: when a product goes from ‘In use’ to ‘Deprecate’, set its cost to 0€.**
|
||||
|
||||
Create an :doc:`automated action <../concepts/understanding_automated_actions>` with the selected
|
||||
values:
|
||||
|
||||
- *Model*: Product Template
|
||||
- *Trigger*: On Update
|
||||
- *First Domain*: Pipeline status bar = In use
|
||||
- *Second Domain*: Pipeline status bar = Deprecated
|
||||
- *Action To Do*: Update the Record
|
||||
- *Data to Write*: Cost (Product Template) > Value > 0
|
||||
|
||||
.. image:: filters_status_bar/automations_zero_price.png
|
||||
:align: center
|
||||
:alt: View of the automated action created to set the price of a product to zero in Odoo Studio
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../concepts/understanding_general`
|
||||
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1,139 @@
|
||||
=====================================================
|
||||
Advanced Use Cases: Creating Models and Adding Fields
|
||||
=====================================================
|
||||
|
||||
- **Case scenario 1: on the leads’ form, if the chosen country is France, show a field
|
||||
'Pay by check?'**
|
||||
|
||||
| On your leads’ form, add a *Related Field* to *Country > Country Name*.
|
||||
| Now, add a *Checkbox* field and define its invisibility options as *Country* (carefully select
|
||||
the one just created) *> is not = > France.*
|
||||
| You can now hide the related field created (*Country*) if you wish.
|
||||
|
||||
.. image:: models_fields/invisible_domain.png
|
||||
:align: center
|
||||
:alt: View of the invisibility domain of a field being set in Odoo Studio
|
||||
|
||||
| Another approach is to use the country’s ID. To do so, go to
|
||||
:menuselection:`Contacts --> Configuration --> Countries`, select France (for example), and on the
|
||||
URL check its *ID*.
|
||||
| The related field invisibility path should now be *Country* (carefully select the one just
|
||||
created) *> is not = > 75*.
|
||||
| Again, hide the related field with the country’s ID if you prefer.
|
||||
|
||||
.. image:: models_fields/url_id.png
|
||||
:align: center
|
||||
:alt: View of an URL emphasizing where a country’s ID can be found for Odoo Studio
|
||||
|
||||
- **Case scenario 2: create a model called 'Properties' and add fields called: company, value, name,
|
||||
address, active, image.**
|
||||
|
||||
From the dashboard, (optionally) start a new module. Then, click on *Edit Menu* and start a
|
||||
*New Menu* (model). Set your menu name and *Confirm*. Now, on its form, drag & drop the necessary
|
||||
fields.
|
||||
|
||||
.. image:: models_fields/new_menu.png
|
||||
:align: center
|
||||
:alt: View of the recommended fields for an object in Odoo Studio
|
||||
|
||||
- **Case scenario 2.a: now, you would like to have a model called 'Regions' to which each property
|
||||
must be linked. And, on 'Regions', you would like to see the properties for each region.**
|
||||
|
||||
| Go to *Edit Menu > New Menu* and create your menu, calling it *Regions*. Add the necessary fields
|
||||
on its form by dragging & dropping them.
|
||||
| Now, in the form view of *Properties*, add a *Many2one* field with a relation to your model
|
||||
*Region*.
|
||||
|
||||
.. tip::
|
||||
The *Existing Fields* are the ones that are on the current model but not yet in the view.
|
||||
|
||||
.. image:: models_fields/new_existing_fields.png
|
||||
:align: center
|
||||
:height: 420
|
||||
:alt: Form view and a Many2one field being dropped in Odoo Studio
|
||||
|
||||
.. image:: models_fields/real_estate_many2one.png
|
||||
:align: center
|
||||
:alt: Form view and a Many2one field being dropped in Odoo Studio
|
||||
|
||||
| Now, go to the model *Regions*, select the form view, and add a status button selecting *Regions
|
||||
(Properties)* as your relational field.
|
||||
| *Status buttons* are computed fields, meaning that they count the numbers of records on the
|
||||
related model, and allow you to access them.
|
||||
|
||||
.. image:: models_fields/add_button.png
|
||||
:align: center
|
||||
:alt: Form view and the status button window being shown in Odoo Studio
|
||||
|
||||
.. tip::
|
||||
When searching for relations, click on *Search more* and filter it by *Custom*. This way you
|
||||
avoid creating duplicates.
|
||||
|
||||
.. image:: models_fields/search_model_custom.png
|
||||
:align: center
|
||||
:alt: View of the search model window in Odoo Studio
|
||||
|
||||
- **Case scenario 2.b: in the model 'Properties', show all the tags as checkboxes instead of tags.**
|
||||
|
||||
Once the field *Tags* is added to the form, select it and, under its *Properties > Widgets*, choose
|
||||
*Checkboxes*.
|
||||
|
||||
.. image:: models_fields/widget.png
|
||||
:align: center
|
||||
:alt: Form view showing the widgets available in Odoo Studio
|
||||
|
||||
- **Case scenario 3: on the leads’ form, add a selection field with the values:'Tags' & 'List' &
|
||||
'Checkboxes'. According to the value of the field, show tags as many2many_tags, many2many_radio,
|
||||
or many2many(_list).**
|
||||
|
||||
In your form view, add a *Tags* field and relate it to *Partners Tag*. Under *Properties*, define
|
||||
its *Widget* as *Many2many*. Do the same process another 2 times for *Checkboxes* and *Tags*.
|
||||
|
||||
.. image:: models_fields/widget_checkboxes.png
|
||||
:align: center
|
||||
:alt: Form view emphasizing the widget property in Odoo Studio
|
||||
|
||||
| Now, add a *Selection* field and the necessary values.
|
||||
| Continue by selecting your *Tags* fields, one by one, to set their *Invisible* options according
|
||||
to their *Widget*. In the example below, the invisibility rule for the *Partner Tags* is set as:
|
||||
*Select Tag type > is not = > Tags.*
|
||||
|
||||
.. image:: models_fields/domain_select_tag_type.png
|
||||
:align: center
|
||||
:alt: Form view emphasizing a field added and its invisibility properties in Odoo Studio
|
||||
|
||||
- **Case scenario 4: on a quotation’s form, add a selection field called 'Manager Validation' with
|
||||
the values: ‘Accepted’ and ‘Refused’. Only a sales manager can see it, and the field should be
|
||||
set as mandatory if the untaxed amount is higher than 500€.**
|
||||
|
||||
On your quotation form, add a *Selection* field with the values *Accepted* and *Refused*. Set its
|
||||
*Required* condition as *Untaxed Amount > 500* and the *Limit visibility to groups* as *Sales /
|
||||
Administrator* or managers.
|
||||
|
||||
.. image:: models_fields/domain_higher_500.png
|
||||
:align: center
|
||||
:alt: Form view of a required domain being set in Odoo Studio
|
||||
|
||||
- **Case scenario 5: change the tooltip of a field for all views.**
|
||||
|
||||
| Activate the :ref:`developer mode <developer-mode>` and open Studio.
|
||||
| Select the necessary field and, under *Properties*, click on *More* to write your tooltip message
|
||||
on *Field Help*. The tooltip message is the explanatory message shown when the user hovers the
|
||||
field. The message here written is displayed on all views forms where the field is added.
|
||||
|
||||
.. image:: models_fields/field_help.png
|
||||
:align: center
|
||||
:alt: Form view showing more property options and emphasizing the help feature in Odoo Studio
|
||||
|
||||
.. note::
|
||||
The *Field Help* message can only be applied to *new* fields. If you would like to change/apply a
|
||||
tooltip for a specific field, use the *Help Tooltip* option under *Properties*.
|
||||
|
||||
.. image:: models_fields/help_tooltip.png
|
||||
:align: center
|
||||
:height: 350
|
||||
:alt: View of the properties emphasizing the help tooltip option in Odoo Studio
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../concepts/understanding_general`
|
||||
|
||||
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 37 KiB |
28
content/applications/productivity/studio/use_cases/views.rst
Normal file
@@ -0,0 +1,28 @@
|
||||
=========================
|
||||
Advanced Use Cases: Views
|
||||
=========================
|
||||
|
||||
- **Case scenario 1: in Sales, show orders in a Kanban View instead of a List View.**
|
||||
|
||||
From the Sales page, access Studio and, under *Views*, set the *Kanban* option as the default one.
|
||||
|
||||
.. image:: views/kanban_default.png
|
||||
:align: center
|
||||
:height: 380
|
||||
:alt: View of the Kanban option being set as the default one in Odoo Studio
|
||||
|
||||
- **Case scenario 2: allow for the list of leads to be edited inline without having to switch to
|
||||
the form view.**
|
||||
|
||||
| On the *List View*, under *View* > *Editable*, choose between *New record on top* or *New record
|
||||
at the bottom*. This way, besides defining the order in which new records are displayed in the
|
||||
view, you are able to edit them.
|
||||
| If the field is left blank, no editing is possible and records are shown based on your column
|
||||
preferences on the lead's page (front-end).
|
||||
|
||||
.. image:: views/view_editable.png
|
||||
:align: center
|
||||
:alt: View options emphasizing the editable options of a leads page in Odoo Studio
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../concepts/understanding_general`
|
||||
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 92 KiB |
@@ -1,378 +0,0 @@
|
||||
=====
|
||||
Views
|
||||
=====
|
||||
|
||||
Views are the interface that allows displaying the data contained in a model. One model can have
|
||||
several views, which are simply different ways to show the same data. In Studio, views are organized
|
||||
into four categories: :ref:`general <studio/views/general>`, :ref:`multiple records
|
||||
<studio/views/multiple-records>`, :ref:`timeline <studio/views/timeline>`, and :ref:`reporting
|
||||
<studio/views/reporting>`.
|
||||
|
||||
.. tip::
|
||||
To change the default view of a model, go to :menuselection:`Studio --> Views --> Dropdown menu
|
||||
(⋮) --> Set as Default`.
|
||||
|
||||
.. note::
|
||||
You can modify views by using the built-in XML editor. To do so, activate :ref:`Developer mode
|
||||
<developer-mode>`, go to the view you want to edit, select the :guilabel:`View` tab and then
|
||||
click on :guilabel:`</> XML`.
|
||||
|
||||
.. important::
|
||||
If you are editing a view using the XML editor, avoid making changes directly to standard
|
||||
views and inherited views, as those would be reset and would not be kept in case of an update
|
||||
or module upgrade. Always make sure you select the right Studio inherited views. Indeed, when
|
||||
you modify a view in Studio by drag-and-dropping a new field, a specific Studio inherited view
|
||||
and its XPath, the latter which defines which part of the view is modified, are automatically
|
||||
generated.
|
||||
|
||||
.. _studio/views/general:
|
||||
|
||||
General views
|
||||
=============
|
||||
|
||||
.. note::
|
||||
The settings described below are found under the view's :guilabel:`View` tab unless specified
|
||||
otherwise.
|
||||
|
||||
.. _studio/views/general/form:
|
||||
|
||||
Form
|
||||
----
|
||||
|
||||
The :guilabel:`Form` view is used when creating and editing records, such as contacts, sales orders,
|
||||
products, etc.
|
||||
|
||||
- To structure a form, drag-and-drop the :guilabel:`Tabs and Columns` element found under the
|
||||
:guilabel:`+ Add` tab.
|
||||
- To prevent users from creating, editing, or deleting records, untick :guilabel:`Can Create`,
|
||||
:guilabel:`Can Edit`, or :guilabel:`Can Delete`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/form-sales-order.png
|
||||
:align: center
|
||||
:alt: Sales order model's Form view
|
||||
|
||||
.. _studio/views/general/activity:
|
||||
|
||||
Activity
|
||||
--------
|
||||
|
||||
The :guilabel:`Activity` view is used to schedule and have an overview of activities (emails, calls,
|
||||
etc.) linked to records.
|
||||
|
||||
.. note::
|
||||
This view can only be modified within Studio by editing the XML code.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/activity-lead-opportunity.png
|
||||
:align: center
|
||||
:alt: Lead/Opportunity model's Activity view
|
||||
|
||||
.. _studio/views/general/search:
|
||||
|
||||
Search
|
||||
------
|
||||
|
||||
The :guilabel:`Search` view is added on top of other views to filter, group, and search records.
|
||||
|
||||
- To add custom :guilabel:`Filters` and structure them using :guilabel:`Separators`, go to the
|
||||
:guilabel:`+ Add` tab and drag and drop them under :guilabel:`Filters`.
|
||||
- To add an existing field under the search dropdown menu, go to the :guilabel:`+ Add` tab and
|
||||
drag-and-drop it under :guilabel:`Autocompletion Fields`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/search-project-kanban.png
|
||||
:align: center
|
||||
:alt: Project model's Search view on the Kanban view
|
||||
|
||||
.. _studio/views/multiple-records:
|
||||
|
||||
Multiple records views
|
||||
======================
|
||||
|
||||
.. note::
|
||||
The settings described below are found under the view's :guilabel:`View` tab unless specified
|
||||
otherwise.
|
||||
|
||||
.. _studio/views/multiple-records/kanban:
|
||||
|
||||
Kanban
|
||||
------
|
||||
|
||||
The :guilabel:`Kanban` view is often used to support business flows by moving records across stages
|
||||
or as an alternative way to display records inside *cards*.
|
||||
|
||||
.. note::
|
||||
If the :guilabel:`Kanban` view exists, it is used by default to display data on mobile devices
|
||||
instead of the :ref:`List view <studio/views/multiple-records/list>`.
|
||||
|
||||
- To prevent users from creating new records, untick :guilabel:`Can Create`.
|
||||
- To create records directly within the view, in a minimalistic form, enable :guilabel:`Quick
|
||||
Create`.
|
||||
- To change the way records are grouped by default, select a new group under :guilabel:`Default
|
||||
Group by`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/kanban-project.png
|
||||
:align: center
|
||||
:alt: Project model's Kanban view
|
||||
|
||||
.. _studio/views/multiple-records/list:
|
||||
|
||||
List
|
||||
----
|
||||
|
||||
The :guilabel:`List` view is used to overview many records at once, look for records, and edit
|
||||
simple records.
|
||||
|
||||
- To prevent users from creating, editing, or deleting records, untick :guilabel:`Can Create`,
|
||||
:guilabel:`Can Edit`, or :guilabel:`Can Delete`.
|
||||
- To create and edit records directly within the view, select either :guilabel:`New record on top`
|
||||
or :guilabel:`New record at the bottom` under :guilabel:`Editable`.
|
||||
|
||||
.. note::
|
||||
This prevents users from opening records in :ref:`Form view <studio/views/general/form>` from the
|
||||
:guilabel:`List` view.
|
||||
|
||||
- To edit several records at once, tick :guilabel:`Enable Mass Editing`.
|
||||
- To change the way records are sorted by default, select a field under :guilabel:`Sort By`.
|
||||
|
||||
.. tip::
|
||||
To add a drag handle icon to reorder records manually, add an :ref:`Integer field
|
||||
<studio/fields/simple-fields/integer>` with the :guilabel:`Handle` widget.
|
||||
|
||||
.. image:: views/list-drag-handle.png
|
||||
:align: center
|
||||
:alt: Drag handle icon enabling to sort records manually in List view
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/list-sales-order.png
|
||||
:align: center
|
||||
:alt: Sales order model's List view
|
||||
|
||||
.. _studio/views/multiple-records/map:
|
||||
|
||||
Map
|
||||
---
|
||||
|
||||
The :guilabel:`Map` view is used to display records on a map. For example, it is used in the Field
|
||||
Service app to plan an itinerary between different tasks.
|
||||
|
||||
.. note::
|
||||
A :ref:`Many2One field <studio/fields/relational-fields/many2one>` linked to the *Contact* model
|
||||
is required to activate the view, as the contact address is used to position records on the map.
|
||||
|
||||
- To select which kind of contact should be used on the map, select it under :guilabel:`Contact
|
||||
Field`.
|
||||
- To hide the name or the address of the record, tick :guilabel:`Hide name` or :guilabel:`Hide
|
||||
Address`.
|
||||
- To add information from other fields, select them under :guilabel:`Additional Fields`.
|
||||
- To have a route suggested between the different records, tick :guilabel:`Enable Routing` and
|
||||
select which field should be used to sort records for the routing.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/map-task.png
|
||||
:align: center
|
||||
:alt: Task model's Map view
|
||||
|
||||
.. _studio/views/timeline:
|
||||
|
||||
Timeline views
|
||||
==============
|
||||
|
||||
.. note::
|
||||
- When you first activate one of the timeline views, you need to select which :ref:`Date
|
||||
<studio/fields/simple-fields/date>` or :ref:`Date & Time
|
||||
<studio/fields/simple-fields/date-time>` fields on your model should be used to define when the
|
||||
records start and stop in order to display them on the view. You can modify the
|
||||
:guilabel:`Start Date Field` and :guilabel:`Stop Date Field` after activating the view.
|
||||
- The settings described below are found under the view's :guilabel:`View` tab unless specified
|
||||
otherwise.
|
||||
|
||||
.. _studio/views/timeline/calendar:
|
||||
|
||||
Calendar
|
||||
--------
|
||||
|
||||
The :guilabel:`Calendar` view is used to overview and manage records inside a calendar.
|
||||
|
||||
- To create records directly within the view instead of opening the :ref:`Form view
|
||||
<studio/views/general/form>`, enable :guilabel:`Quick Create`.
|
||||
|
||||
.. note::
|
||||
This only works on specific models that can be *quick-created* using only a *name*. However,
|
||||
most models do not support quick creation and open the :guilabel:`Form` view to fill in the
|
||||
required fields.
|
||||
|
||||
- To color records on the calendar, select a field under :guilabel:`Color`. All the records sharing
|
||||
the same value for that field are displayed using the same color.
|
||||
|
||||
.. note::
|
||||
As the number of colors is limited, the same color can end up being assigned to different
|
||||
values.
|
||||
|
||||
- To display events lasting the whole day at the top of the calendar, select a :ref:`Checkbox field
|
||||
<studio/fields/simple-fields/checkbox>` that specifies if the event lasts the whole day.
|
||||
|
||||
- To choose the default time scale used to display events, select :guilabel:`Day`, :guilabel:`Week`,
|
||||
:guilabel:`Month`, or :guilabel:`Year` under :guilabel:`Default Display Mode`.
|
||||
|
||||
.. note::
|
||||
You can also use :guilabel:`Delay Field` to display the duration of the event in hours by
|
||||
selecting a :ref:`Decimal <studio/fields/simple-fields/decimal>` or :ref:`Integer
|
||||
<studio/fields/simple-fields/integer>` field on the model which specifies the duration of the
|
||||
event. However, if you set an :guilabel:`End Date Field`, the :guilabel:`Delay Field` will not be
|
||||
taken into account.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/calendar-event.png
|
||||
:align: center
|
||||
:alt: Calendar Event model's Calendar view
|
||||
|
||||
.. _studio/views/timeline/cohort:
|
||||
|
||||
Cohort
|
||||
------
|
||||
|
||||
The :guilabel:`Cohort` view is used to examine the life cycle of records over a time period. For
|
||||
example, it is used in the Subscriptions app to view the subscriptions' retention rate.
|
||||
|
||||
- To display a measure (i.e., the aggregated value of a given field) by default on the view, select
|
||||
a :guilabel:`Measure Field`.
|
||||
- To choose which time interval is used by default to group results, select :guilabel:`Day`,
|
||||
:guilabel:`Week`, :guilabel:`Month`, or :guilabel:`Year` under :guilabel:`Interval`.
|
||||
- To change the cohort :guilabel:`Mode`, select either :guilabel:`Retention` :dfn:`the percentage
|
||||
of records staying over a period of time, it starts at 100% and decreases with time` or
|
||||
:guilabel:`Churn` :dfn:`the percentage of records moving out over a period of time - it starts at
|
||||
0% and increases with time`.
|
||||
- To change the way the :guilabel:`Timeline` (i.e., the columns) progresses, select either
|
||||
:guilabel:`Forward` (from 0 to +15) or :guilabel:`Backward` (from -15 to 0). For most purposes,
|
||||
the :guilabel:`Forward` timeline is used.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/cohort-subscription.png
|
||||
:align: center
|
||||
:alt: Subscription model's Cohort view
|
||||
|
||||
.. _studio/views/timeline/gantt:
|
||||
|
||||
Gantt
|
||||
-----
|
||||
|
||||
The :guilabel:`Gantt` view is used to forecast and examine the overall progress of records. Records
|
||||
are represented by a bar under a time scale.
|
||||
|
||||
- To prevent users from creating or editing records, untick :guilabel:`Can Create` or :guilabel:`Can
|
||||
Edit`.
|
||||
- To fill cells in gray whenever a record should not be created there (e.g., on weekends for
|
||||
employees), tick :guilabel:`Display Unavailability`.
|
||||
|
||||
.. note::
|
||||
The underlying model must support this feature, and support for it cannot be added using
|
||||
Studio. It is supported for the Project, Time Off, Planning, and Manufacturing apps.
|
||||
|
||||
- To show a total row at the bottom, tick :guilabel:`Display Total row`.
|
||||
- To collapse multiple records in a single row, tick :guilabel:`Collapse First Level`.
|
||||
- To choose which way records are grouped by default on rows (e.g., per employee or project), select
|
||||
a field under :guilabel:`Default Group by`.
|
||||
- To define a default time scale to view records, select :guilabel:`Day`, :guilabel:`Week`,
|
||||
:guilabel:`Month`, or :guilabel:`Year` under :guilabel:`Default Scale`.
|
||||
- To color records on the view, select a field under :guilabel:`Color`. All the records sharing the
|
||||
same value for that field are displayed using the same color.
|
||||
|
||||
.. note::
|
||||
As the number of colors is limited, the same color can be assigned to different values.
|
||||
|
||||
- To specify with which degree of precision each time scale should be divided by, select
|
||||
:guilabel:`Quarter Hour`, :guilabel:`Half Hour`, or :guilabel:`Hour` under :guilabel:`Day
|
||||
Precision`, :guilabel:`Half Day` or :guilabel:`Day` under :guilabel:`Week Precision`, and
|
||||
:guilabel:`Month Precision`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/gantt-planning.png
|
||||
:align: center
|
||||
:alt: Planning Shift model's Gantt view
|
||||
|
||||
.. _studio/views/reporting:
|
||||
|
||||
Reporting views
|
||||
===============
|
||||
|
||||
.. note::
|
||||
The settings described below are found under the view's :guilabel:`View` tab unless specified
|
||||
otherwise.
|
||||
|
||||
.. _studio/views/reporting/pivot:
|
||||
|
||||
Pivot
|
||||
-----
|
||||
|
||||
The :guilabel:`Pivot` view is used to explore and analyze the data contained in records in an
|
||||
interactive manner. It is especially useful to aggregate numeric data, create categories, and drill
|
||||
down the data by expanding and collapsing different levels of data.
|
||||
|
||||
- To access all records whose data is aggregated under a cell, tick :guilabel:`Access records from
|
||||
cell`.
|
||||
- To divide the data into different categories, select field(s) under :guilabel:`Column grouping`,
|
||||
:guilabel:`Row grouping - First level`, or :guilabel:`Row grouping - Second level`.
|
||||
- To add different types of data to be measured using the view, select a field under
|
||||
:guilabel:`Measures`.
|
||||
- To display a count of records that made up the aggregated data in a cell, tick :guilabel:`Display
|
||||
count`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/pivot-purchase-report.png
|
||||
:align: center
|
||||
:alt: Purchase Report model's Pivot view
|
||||
|
||||
.. _studio/views/reporting/graph:
|
||||
|
||||
Graph
|
||||
-----
|
||||
|
||||
The :guilabel:`Graph` view is used to showcase data from records in a bar, line, or pie chart.
|
||||
|
||||
- To change the default chart, select :guilabel:`Bar`, :guilabel:`Line`, or :guilabel:`Pie` under
|
||||
:guilabel:`Type`.
|
||||
- To choose a default data dimension (category), select a field under :guilabel:`First dimension`
|
||||
and, if needed, another under :guilabel:`Second dimension`.
|
||||
- To select a default type of data to be measured using the view, select a field under
|
||||
:guilabel:`Measure`.
|
||||
- *For Bar and Line charts only*: To sort the different data categories by their value, select
|
||||
:guilabel:`Ascending` (from lowest to highest value) or :guilabel:`Descending` (from highest to
|
||||
lowest) under :guilabel:`Sorting`.
|
||||
- *For Bar and Pie charts only*: To access all records whose data is aggregated under a data
|
||||
category on the chart, tick :guilabel:`Access records from graph`.
|
||||
- *For Bar charts only*: When using two data dimensions (categories), display the two columns on top
|
||||
of each other by default by ticking :guilabel:`Stacked graph`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/graph-sales-report.png
|
||||
:align: center
|
||||
:alt: Sales Analysis Report model's Bar chart on Graph view
|
||||
|
||||
.. _studio/views/reporting/dashboard:
|
||||
|
||||
Dashboard
|
||||
---------
|
||||
|
||||
The :guilabel:`Dashboard` view is used to display multiple reporting views and key performance
|
||||
indicators. Which elements are displayed on the view depends on the configuration of the other
|
||||
reporting views.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: views/dashboard-sales-report.png
|
||||
:align: center
|
||||
:alt: Sales Analysis Report model's Dashboard view
|
||||
|
Before Width: | Height: | Size: 22 KiB |