[IMP] studio: complete update of Studio
The goal is to make the Studio users doc a sort of encyclopedia to accompany tutorials.
The doc isn't to explain the basics - or just briefly, as introductions - but instead to
give a full overview of all the available options.
closes odoo/documentation#2531
Task: 2817981
X-original-commit: c8ea9703f7
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
@ -1,21 +1,30 @@
|
||||
: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/concepts
|
||||
studio/use_cases
|
||||
studio/how_to
|
||||
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>`_
|
249
content/applications/productivity/studio/automated_actions.rst
Normal file
@ -0,0 +1,249 @@
|
||||
===============================
|
||||
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`.
|
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 9.6 KiB |
@ -1,11 +0,0 @@
|
||||
:nosearch:
|
||||
|
||||
========
|
||||
Concepts
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
concepts/understanding_general
|
||||
concepts/understanding_automated_actions
|
@ -1,77 +0,0 @@
|
||||
===============================
|
||||
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`
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 5.8 KiB |
@ -1,95 +0,0 @@
|
||||
==============================
|
||||
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>`_
|
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 33 KiB |
493
content/applications/productivity/studio/fields.rst
Normal file
@ -0,0 +1,493 @@
|
||||
==================
|
||||
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.
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 38 KiB |
BIN
content/applications/productivity/studio/fields/html-example.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 8.4 KiB |
BIN
content/applications/productivity/studio/fields/tags-example.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 16 KiB |
@ -1,12 +0,0 @@
|
||||
:nosearch:
|
||||
|
||||
======
|
||||
How To
|
||||
======
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
how_to/rainbow_man
|
||||
how_to/reports
|
||||
how_to/export_import
|
@ -1,28 +0,0 @@
|
||||
=========================
|
||||
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.
|
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 14 KiB |
@ -1,23 +0,0 @@
|
||||
===========================
|
||||
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
|
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 46 KiB |
@ -1,72 +0,0 @@
|
||||
===================
|
||||
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
|
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 22 KiB |
227
content/applications/productivity/studio/models_modules_apps.rst
Normal file
@ -0,0 +1,227 @@
|
||||
=========================
|
||||
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.
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 3.3 KiB |
@ -1,13 +0,0 @@
|
||||
:nosearch:
|
||||
|
||||
=========
|
||||
Use Cases
|
||||
=========
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
use_cases/models_fields
|
||||
use_cases/filters_status_bar
|
||||
use_cases/automated_actions
|
||||
use_cases/views
|
@ -1,26 +0,0 @@
|
||||
=====================================
|
||||
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`
|
Before Width: | Height: | Size: 31 KiB |
@ -1,61 +0,0 @@
|
||||
==========================================
|
||||
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`
|
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 50 KiB |
@ -1,139 +0,0 @@
|
||||
=====================================================
|
||||
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`
|
||||
|
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 37 KiB |
@ -1,28 +0,0 @@
|
||||
=========================
|
||||
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`
|
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 92 KiB |
378
content/applications/productivity/studio/views.rst
Normal file
@ -0,0 +1,378 @@
|
||||
=====
|
||||
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
|
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 53 KiB |
BIN
content/applications/productivity/studio/views/map-task.png
Normal file
After Width: | Height: | Size: 292 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 8.2 KiB |
@ -13,6 +13,15 @@ applications/general/payment_acquirers/sips.rst applications/finance/payment_acq
|
||||
|
||||
applications/general/product_images.rst applications/sales/sales/products_prices/products/product_images.rst # fix a wrong target hard-coded in Odoo
|
||||
|
||||
# applications/productivity
|
||||
|
||||
applications/productivity/studio/concepts/understanding_automated_actions.rst applications/productivity/studio/automated_actions.rst
|
||||
applications/productivity/studio/concepts/understanding_general.rst applications/productivity/studio.rst
|
||||
applications/productivity/studio/how_to/export_import.rst applications/productivity/studio/models_modules_apps.rst
|
||||
applications/productivity/studio/use_cases/automated_actions.rst applications/productivity/studio/automated_actions.rst
|
||||
applications/productivity/studio/use_cases/models_fields.rst applications/productivity/studio/fields.rst
|
||||
applications/productivity/studio/use_cases/views.rst applications/productivity/studio/views.rst
|
||||
|
||||
# applications/sales
|
||||
|
||||
applications/sales/crm/optimize/outlook_extension.rst applications/productivity/mail_plugins/outlook.rst
|
||||
|