diff --git a/content/applications/productivity/studio.rst b/content/applications/productivity/studio.rst index f48e6a714f..fce2bf4eee 100644 --- a/content/applications/productivity/studio.rst +++ b/content/applications/productivity/studio.rst @@ -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 `_ - .. 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 ` +- :doc:`Views ` +- :doc:`Models ` +- :doc:`Automated actions ` +- PDF reports +- Approval rules +- Security rules + +Or you can :doc:`build an app from scratch `. + +.. seealso:: + - `Odoo Tutorials: Studio `_ \ No newline at end of file diff --git a/content/applications/productivity/studio/automated_actions.rst b/content/applications/productivity/studio/automated_actions.rst new file mode 100644 index 0000000000..afe84d9c4e --- /dev/null +++ b/content/applications/productivity/studio/automated_actions.rst @@ -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 +`, 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 + `, 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`. \ No newline at end of file diff --git a/content/applications/productivity/studio/automated_actions/automated-action-example.png b/content/applications/productivity/studio/automated_actions/automated-action-example.png new file mode 100644 index 0000000000..9e3bb66163 Binary files /dev/null and b/content/applications/productivity/studio/automated_actions/automated-action-example.png differ diff --git a/content/applications/productivity/studio/automated_actions/new-record-example.png b/content/applications/productivity/studio/automated_actions/new-record-example.png new file mode 100644 index 0000000000..76deb7f5a4 Binary files /dev/null and b/content/applications/productivity/studio/automated_actions/new-record-example.png differ diff --git a/content/applications/productivity/studio/automated_actions/next-activity-example.png b/content/applications/productivity/studio/automated_actions/next-activity-example.png new file mode 100644 index 0000000000..82ae712eb0 Binary files /dev/null and b/content/applications/productivity/studio/automated_actions/next-activity-example.png differ diff --git a/content/applications/productivity/studio/automated_actions/on-update-trigger-example.png b/content/applications/productivity/studio/automated_actions/on-update-trigger-example.png new file mode 100644 index 0000000000..da85410cf6 Binary files /dev/null and b/content/applications/productivity/studio/automated_actions/on-update-trigger-example.png differ diff --git a/content/applications/productivity/studio/automated_actions/timed-condition-trigger-example.png b/content/applications/productivity/studio/automated_actions/timed-condition-trigger-example.png new file mode 100644 index 0000000000..07019195c5 Binary files /dev/null and b/content/applications/productivity/studio/automated_actions/timed-condition-trigger-example.png differ diff --git a/content/applications/productivity/studio/concepts.rst b/content/applications/productivity/studio/concepts.rst deleted file mode 100644 index d166867bbb..0000000000 --- a/content/applications/productivity/studio/concepts.rst +++ /dev/null @@ -1,11 +0,0 @@ -:nosearch: - -======== -Concepts -======== - -.. toctree:: - :titlesonly: - - concepts/understanding_general - concepts/understanding_automated_actions diff --git a/content/applications/productivity/studio/concepts/understanding_automated_actions.rst b/content/applications/productivity/studio/concepts/understanding_automated_actions.rst deleted file mode 100644 index 12a7bc12f4..0000000000 --- a/content/applications/productivity/studio/concepts/understanding_automated_actions.rst +++ /dev/null @@ -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 ` 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 ` 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 `. - -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` diff --git a/content/applications/productivity/studio/concepts/understanding_automated_actions/action_update_lead_example.png b/content/applications/productivity/studio/concepts/understanding_automated_actions/action_update_lead_example.png deleted file mode 100644 index 73d5ec8449..0000000000 Binary files a/content/applications/productivity/studio/concepts/understanding_automated_actions/action_update_lead_example.png and /dev/null differ diff --git a/content/applications/productivity/studio/concepts/understanding_automated_actions/automated_action_flow.png b/content/applications/productivity/studio/concepts/understanding_automated_actions/automated_action_flow.png deleted file mode 100644 index bd25f75917..0000000000 Binary files a/content/applications/productivity/studio/concepts/understanding_automated_actions/automated_action_flow.png and /dev/null differ diff --git a/content/applications/productivity/studio/concepts/understanding_general.rst b/content/applications/productivity/studio/concepts/understanding_general.rst deleted file mode 100644 index edb1fd76d1..0000000000 --- a/content/applications/productivity/studio/concepts/understanding_general.rst +++ /dev/null @@ -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 `_ \ No newline at end of file diff --git a/content/applications/productivity/studio/concepts/understanding_general/edit_menu.png b/content/applications/productivity/studio/concepts/understanding_general/edit_menu.png deleted file mode 100644 index 8e1bc657c1..0000000000 Binary files a/content/applications/productivity/studio/concepts/understanding_general/edit_menu.png and /dev/null differ diff --git a/content/applications/productivity/studio/concepts/understanding_general/new_app.png b/content/applications/productivity/studio/concepts/understanding_general/new_app.png deleted file mode 100644 index c1be872241..0000000000 Binary files a/content/applications/productivity/studio/concepts/understanding_general/new_app.png and /dev/null differ diff --git a/content/applications/productivity/studio/concepts/understanding_general/relational_fields.png b/content/applications/productivity/studio/concepts/understanding_general/relational_fields.png deleted file mode 100644 index 6ec627bf8c..0000000000 Binary files a/content/applications/productivity/studio/concepts/understanding_general/relational_fields.png and /dev/null differ diff --git a/content/applications/productivity/studio/fields.rst b/content/applications/productivity/studio/fields.rst new file mode 100644 index 0000000000..2699d5fc4c --- /dev/null +++ b/content/applications/productivity/studio/fields.rst @@ -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 + ` 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 + `. + +.. 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 + `. 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 `, 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 +` 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 `. + +.. 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 + `. This has the same effect as using the :ref:`Image field + `. +- :guilabel:`PDF Viewer`: users can upload a PDF file, which can be then browsed from the + :ref:`Form view `. +- :guilabel:`Sign`: users can electronically sign the form. This has the same effect as selecting + the :ref:`Sign field `. + +.. 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 +`. This field type is a :ref:`File field +` 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 `. + +.. 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 ` 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 `. + +.. 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 `, + :ref:`Many2One `, and :ref:`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 `. 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 +`. + +.. 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: + +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 +` 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 `. + +.. 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 `, 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. \ No newline at end of file diff --git a/content/applications/productivity/studio/fields/checkbox-examples.png b/content/applications/productivity/studio/fields/checkbox-examples.png new file mode 100644 index 0000000000..c4089b4dc7 Binary files /dev/null and b/content/applications/productivity/studio/fields/checkbox-examples.png differ diff --git a/content/applications/productivity/studio/fields/date-examples.png b/content/applications/productivity/studio/fields/date-examples.png new file mode 100644 index 0000000000..4afacc9ec6 Binary files /dev/null and b/content/applications/productivity/studio/fields/date-examples.png differ diff --git a/content/applications/productivity/studio/fields/date-time-examples.png b/content/applications/productivity/studio/fields/date-time-examples.png new file mode 100644 index 0000000000..77b86201ec Binary files /dev/null and b/content/applications/productivity/studio/fields/date-time-examples.png differ diff --git a/content/applications/productivity/studio/fields/decimal-examples.png b/content/applications/productivity/studio/fields/decimal-examples.png new file mode 100644 index 0000000000..6179e5fbf2 Binary files /dev/null and b/content/applications/productivity/studio/fields/decimal-examples.png differ diff --git a/content/applications/productivity/studio/fields/file-examples.png b/content/applications/productivity/studio/fields/file-examples.png new file mode 100644 index 0000000000..fbed2346a8 Binary files /dev/null and b/content/applications/productivity/studio/fields/file-examples.png differ diff --git a/content/applications/productivity/studio/fields/html-example.png b/content/applications/productivity/studio/fields/html-example.png new file mode 100644 index 0000000000..999953c5fc Binary files /dev/null and b/content/applications/productivity/studio/fields/html-example.png differ diff --git a/content/applications/productivity/studio/fields/integer-examples.png b/content/applications/productivity/studio/fields/integer-examples.png new file mode 100644 index 0000000000..659c5a55b7 Binary files /dev/null and b/content/applications/productivity/studio/fields/integer-examples.png differ diff --git a/content/applications/productivity/studio/fields/lines-example.png b/content/applications/productivity/studio/fields/lines-example.png new file mode 100644 index 0000000000..7640a94e90 Binary files /dev/null and b/content/applications/productivity/studio/fields/lines-example.png differ diff --git a/content/applications/productivity/studio/fields/many2many-diagram.png b/content/applications/productivity/studio/fields/many2many-diagram.png new file mode 100644 index 0000000000..572c88ad76 Binary files /dev/null and b/content/applications/productivity/studio/fields/many2many-diagram.png differ diff --git a/content/applications/productivity/studio/fields/many2one-diagram.png b/content/applications/productivity/studio/fields/many2one-diagram.png new file mode 100644 index 0000000000..4b7553c457 Binary files /dev/null and b/content/applications/productivity/studio/fields/many2one-diagram.png differ diff --git a/content/applications/productivity/studio/fields/monetary-example.png b/content/applications/productivity/studio/fields/monetary-example.png new file mode 100644 index 0000000000..23d9283359 Binary files /dev/null and b/content/applications/productivity/studio/fields/monetary-example.png differ diff --git a/content/applications/productivity/studio/fields/multiline-text-examples.png b/content/applications/productivity/studio/fields/multiline-text-examples.png new file mode 100644 index 0000000000..82c2ac75e8 Binary files /dev/null and b/content/applications/productivity/studio/fields/multiline-text-examples.png differ diff --git a/content/applications/productivity/studio/fields/one2many-diagram.png b/content/applications/productivity/studio/fields/one2many-diagram.png new file mode 100644 index 0000000000..54c3659e84 Binary files /dev/null and b/content/applications/productivity/studio/fields/one2many-diagram.png differ diff --git a/content/applications/productivity/studio/fields/priority-example.png b/content/applications/productivity/studio/fields/priority-example.png new file mode 100644 index 0000000000..65678edab2 Binary files /dev/null and b/content/applications/productivity/studio/fields/priority-example.png differ diff --git a/content/applications/productivity/studio/fields/selection-examples.png b/content/applications/productivity/studio/fields/selection-examples.png new file mode 100644 index 0000000000..c94b01c068 Binary files /dev/null and b/content/applications/productivity/studio/fields/selection-examples.png differ diff --git a/content/applications/productivity/studio/fields/tags-example.png b/content/applications/productivity/studio/fields/tags-example.png new file mode 100644 index 0000000000..0e28fa745e Binary files /dev/null and b/content/applications/productivity/studio/fields/tags-example.png differ diff --git a/content/applications/productivity/studio/fields/text-examples.png b/content/applications/productivity/studio/fields/text-examples.png new file mode 100644 index 0000000000..b4882931f6 Binary files /dev/null and b/content/applications/productivity/studio/fields/text-examples.png differ diff --git a/content/applications/productivity/studio/how_to.rst b/content/applications/productivity/studio/how_to.rst deleted file mode 100644 index 0592e46e6a..0000000000 --- a/content/applications/productivity/studio/how_to.rst +++ /dev/null @@ -1,12 +0,0 @@ -:nosearch: - -====== -How To -====== - -.. toctree:: - :titlesonly: - - how_to/rainbow_man - how_to/reports - how_to/export_import diff --git a/content/applications/productivity/studio/how_to/export_import.rst b/content/applications/productivity/studio/how_to/export_import.rst deleted file mode 100644 index a683ade32d..0000000000 --- a/content/applications/productivity/studio/how_to/export_import.rst +++ /dev/null @@ -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. \ No newline at end of file diff --git a/content/applications/productivity/studio/how_to/export_import/customizations_menu.png b/content/applications/productivity/studio/how_to/export_import/customizations_menu.png deleted file mode 100644 index 0497ed5a52..0000000000 Binary files a/content/applications/productivity/studio/how_to/export_import/customizations_menu.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/export_import/import_modules.png b/content/applications/productivity/studio/how_to/export_import/import_modules.png deleted file mode 100644 index 2f41e86687..0000000000 Binary files a/content/applications/productivity/studio/how_to/export_import/import_modules.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/rainbow_man.rst b/content/applications/productivity/studio/how_to/rainbow_man.rst deleted file mode 100644 index 5717983cf1..0000000000 --- a/content/applications/productivity/studio/how_to/rainbow_man.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/content/applications/productivity/studio/how_to/rainbow_man/crm_rainbow.png b/content/applications/productivity/studio/how_to/rainbow_man/crm_rainbow.png deleted file mode 100644 index c9efe702a1..0000000000 Binary files a/content/applications/productivity/studio/how_to/rainbow_man/crm_rainbow.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/rainbow_man/properties_rainbow.png b/content/applications/productivity/studio/how_to/rainbow_man/properties_rainbow.png deleted file mode 100644 index ebcb55acfc..0000000000 Binary files a/content/applications/productivity/studio/how_to/rainbow_man/properties_rainbow.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports.rst b/content/applications/productivity/studio/how_to/reports.rst deleted file mode 100644 index 4f66b512b3..0000000000 --- a/content/applications/productivity/studio/how_to/reports.rst +++ /dev/null @@ -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 ` 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 `, 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 diff --git a/content/applications/productivity/studio/how_to/reports/add_tab.png b/content/applications/productivity/studio/how_to/reports/add_tab.png deleted file mode 100644 index 191c5f6c70..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/add_tab.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports/limit_visibility.png b/content/applications/productivity/studio/how_to/reports/limit_visibility.png deleted file mode 100644 index 1d65bdaf0a..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/limit_visibility.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports/options_tab.png b/content/applications/productivity/studio/how_to/reports/options_tab.png deleted file mode 100644 index be4cf7ee80..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/options_tab.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports/print_menu.png b/content/applications/productivity/studio/how_to/reports/print_menu.png deleted file mode 100644 index 0d9de83e0c..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/print_menu.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports/report_typing.png b/content/applications/productivity/studio/how_to/reports/report_typing.png deleted file mode 100644 index c3b83061c6..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/report_typing.png and /dev/null differ diff --git a/content/applications/productivity/studio/how_to/reports/undo_redo.png b/content/applications/productivity/studio/how_to/reports/undo_redo.png deleted file mode 100644 index 58f7b50bf3..0000000000 Binary files a/content/applications/productivity/studio/how_to/reports/undo_redo.png and /dev/null differ diff --git a/content/applications/productivity/studio/models_modules_apps.rst b/content/applications/productivity/studio/models_modules_apps.rst new file mode 100644 index 0000000000..94d92a9aaa --- /dev/null +++ b/content/applications/productivity/studio/models_modules_apps.rst @@ -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 `. + + .. 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 ` a +:ref:`Many2One field ` linked to the *Contact* model and +two of its :ref:`Related Fields `: :guilabel:`Phone` +and :guilabel:`Email`. The :guilabel:`Contact` field is also added to the :ref:`List view +`, and the :ref:`Map view ` +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 ` a +:ref:`Many2One field ` 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 +`. + +.. 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 ` a +:ref:`Date field ` and activates the :ref:`Calendar view +`. + +.. _studio/models-modules-apps/suggested-features/date-range-gantt: + +Date range & Gantt +------------------ + +Selecting :guilabel:`Date range & Gantt` adds to the :ref:`Form view ` +two :ref:`Date fields ` 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/models-modules-apps/suggested-features/pipeline-stages: + +Pipeline stages +--------------- + +Selecting :guilabel:`Pipeline stages` activates the :ref:`Kanban view +`, adds several fields such as :ref:`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 +`. The :guilabel:`Color` field is added to the :ref:`List view +`. + +.. 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 +`, 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 +` an :ref:`Image field `. + +.. 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 ` a :ref:`Lines +field ` inside a :guilabel:`Tab` component. + +.. _studio/models-modules-apps/suggested-features/notes: + +Notes +----- + +Selecting :guilabel:`Notes` adds to the :ref:`Form view ` an :ref:`Html +field ` 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 +`. 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 +` 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 +` 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 ` 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. \ No newline at end of file diff --git a/content/applications/productivity/studio/models_modules_apps/chatter.png b/content/applications/productivity/studio/models_modules_apps/chatter.png new file mode 100644 index 0000000000..266bfba068 Binary files /dev/null and b/content/applications/productivity/studio/models_modules_apps/chatter.png differ diff --git a/content/applications/productivity/studio/models_modules_apps/contact.png b/content/applications/productivity/studio/models_modules_apps/contact.png new file mode 100644 index 0000000000..868129c8c6 Binary files /dev/null and b/content/applications/productivity/studio/models_modules_apps/contact.png differ diff --git a/content/applications/productivity/studio/models_modules_apps/picture-pipeline-kanban.png b/content/applications/productivity/studio/models_modules_apps/picture-pipeline-kanban.png new file mode 100644 index 0000000000..ee4be4d21a Binary files /dev/null and b/content/applications/productivity/studio/models_modules_apps/picture-pipeline-kanban.png differ diff --git a/content/applications/productivity/studio/models_modules_apps/user-assignment.png b/content/applications/productivity/studio/models_modules_apps/user-assignment.png new file mode 100644 index 0000000000..f325eb17ac Binary files /dev/null and b/content/applications/productivity/studio/models_modules_apps/user-assignment.png differ diff --git a/content/applications/productivity/studio/use_cases.rst b/content/applications/productivity/studio/use_cases.rst deleted file mode 100644 index 8f3407396a..0000000000 --- a/content/applications/productivity/studio/use_cases.rst +++ /dev/null @@ -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 \ No newline at end of file diff --git a/content/applications/productivity/studio/use_cases/automated_actions.rst b/content/applications/productivity/studio/use_cases/automated_actions.rst deleted file mode 100644 index 3378a9dddd..0000000000 --- a/content/applications/productivity/studio/use_cases/automated_actions.rst +++ /dev/null @@ -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 ` in order to have another automated action example. - -.. seealso:: - - :doc:`../concepts/understanding_automated_actions` - - :doc:`../concepts/understanding_general` \ No newline at end of file diff --git a/content/applications/productivity/studio/use_cases/automated_actions/hight_priority_leads.png b/content/applications/productivity/studio/use_cases/automated_actions/hight_priority_leads.png deleted file mode 100644 index a42d3c6f7e..0000000000 Binary files a/content/applications/productivity/studio/use_cases/automated_actions/hight_priority_leads.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar.rst b/content/applications/productivity/studio/use_cases/filters_status_bar.rst deleted file mode 100644 index 546480568d..0000000000 --- a/content/applications/productivity/studio/use_cases/filters_status_bar.rst +++ /dev/null @@ -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` \ No newline at end of file diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar/add_pipeline.png b/content/applications/productivity/studio/use_cases/filters_status_bar/add_pipeline.png deleted file mode 100644 index 125fdc9966..0000000000 Binary files a/content/applications/productivity/studio/use_cases/filters_status_bar/add_pipeline.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar/automations_zero_price.png b/content/applications/productivity/studio/use_cases/filters_status_bar/automations_zero_price.png deleted file mode 100644 index 806808d485..0000000000 Binary files a/content/applications/productivity/studio/use_cases/filters_status_bar/automations_zero_price.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar/customer_filter.png b/content/applications/productivity/studio/use_cases/filters_status_bar/customer_filter.png deleted file mode 100644 index 00a4a4239d..0000000000 Binary files a/content/applications/productivity/studio/use_cases/filters_status_bar/customer_filter.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar/form_view.png b/content/applications/productivity/studio/use_cases/filters_status_bar/form_view.png deleted file mode 100644 index 49d69e0579..0000000000 Binary files a/content/applications/productivity/studio/use_cases/filters_status_bar/form_view.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/filters_status_bar/sales_default_filter.png b/content/applications/productivity/studio/use_cases/filters_status_bar/sales_default_filter.png deleted file mode 100644 index e83424f79c..0000000000 Binary files a/content/applications/productivity/studio/use_cases/filters_status_bar/sales_default_filter.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields.rst b/content/applications/productivity/studio/use_cases/models_fields.rst deleted file mode 100644 index a15661fbb3..0000000000 --- a/content/applications/productivity/studio/use_cases/models_fields.rst +++ /dev/null @@ -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 ` 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` - diff --git a/content/applications/productivity/studio/use_cases/models_fields/add_button.png b/content/applications/productivity/studio/use_cases/models_fields/add_button.png deleted file mode 100644 index 1bd0047249..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/add_button.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/domain_higher_500.png b/content/applications/productivity/studio/use_cases/models_fields/domain_higher_500.png deleted file mode 100644 index 1742756324..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/domain_higher_500.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/domain_select_tag_type.png b/content/applications/productivity/studio/use_cases/models_fields/domain_select_tag_type.png deleted file mode 100644 index 823ccc21eb..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/domain_select_tag_type.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/field_help.png b/content/applications/productivity/studio/use_cases/models_fields/field_help.png deleted file mode 100644 index c032f508ed..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/field_help.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/help_tooltip.png b/content/applications/productivity/studio/use_cases/models_fields/help_tooltip.png deleted file mode 100644 index 13c09c38fd..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/help_tooltip.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/invisible_domain.png b/content/applications/productivity/studio/use_cases/models_fields/invisible_domain.png deleted file mode 100644 index 3764dfa4fe..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/invisible_domain.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/new_existing_fields.png b/content/applications/productivity/studio/use_cases/models_fields/new_existing_fields.png deleted file mode 100644 index d9f4235afa..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/new_existing_fields.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/new_menu.png b/content/applications/productivity/studio/use_cases/models_fields/new_menu.png deleted file mode 100644 index 929309019d..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/new_menu.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/real_estate_many2one.png b/content/applications/productivity/studio/use_cases/models_fields/real_estate_many2one.png deleted file mode 100644 index 7985fb5a6d..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/real_estate_many2one.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/search_model_custom.png b/content/applications/productivity/studio/use_cases/models_fields/search_model_custom.png deleted file mode 100644 index ce39f13a49..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/search_model_custom.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/url_id.png b/content/applications/productivity/studio/use_cases/models_fields/url_id.png deleted file mode 100644 index 0d4ba9a124..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/url_id.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/widget.png b/content/applications/productivity/studio/use_cases/models_fields/widget.png deleted file mode 100644 index dd8d1d1c55..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/widget.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/models_fields/widget_checkboxes.png b/content/applications/productivity/studio/use_cases/models_fields/widget_checkboxes.png deleted file mode 100644 index 7befb8a5dc..0000000000 Binary files a/content/applications/productivity/studio/use_cases/models_fields/widget_checkboxes.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/views.rst b/content/applications/productivity/studio/use_cases/views.rst deleted file mode 100644 index 5c044ac9bd..0000000000 --- a/content/applications/productivity/studio/use_cases/views.rst +++ /dev/null @@ -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` diff --git a/content/applications/productivity/studio/use_cases/views/kanban_default.png b/content/applications/productivity/studio/use_cases/views/kanban_default.png deleted file mode 100644 index f81a7f48f0..0000000000 Binary files a/content/applications/productivity/studio/use_cases/views/kanban_default.png and /dev/null differ diff --git a/content/applications/productivity/studio/use_cases/views/view_editable.png b/content/applications/productivity/studio/use_cases/views/view_editable.png deleted file mode 100644 index 679e5b2bb0..0000000000 Binary files a/content/applications/productivity/studio/use_cases/views/view_editable.png and /dev/null differ diff --git a/content/applications/productivity/studio/views.rst b/content/applications/productivity/studio/views.rst new file mode 100644 index 0000000000..70abbdf9f5 --- /dev/null +++ b/content/applications/productivity/studio/views.rst @@ -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 `, :ref:`multiple records +`, :ref:`timeline `, and :ref:`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 + `, 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 `. + +- 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 ` 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 + ` 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 ` 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 + ` or :ref:`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 + `, 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 + ` 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 ` or :ref:`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 \ No newline at end of file diff --git a/content/applications/productivity/studio/views/activity-lead-opportunity.png b/content/applications/productivity/studio/views/activity-lead-opportunity.png new file mode 100644 index 0000000000..7d79e712a7 Binary files /dev/null and b/content/applications/productivity/studio/views/activity-lead-opportunity.png differ diff --git a/content/applications/productivity/studio/views/calendar-event.png b/content/applications/productivity/studio/views/calendar-event.png new file mode 100644 index 0000000000..b71b967c31 Binary files /dev/null and b/content/applications/productivity/studio/views/calendar-event.png differ diff --git a/content/applications/productivity/studio/views/cohort-subscription.png b/content/applications/productivity/studio/views/cohort-subscription.png new file mode 100644 index 0000000000..99a15db2b8 Binary files /dev/null and b/content/applications/productivity/studio/views/cohort-subscription.png differ diff --git a/content/applications/productivity/studio/views/dashboard-sales-report.png b/content/applications/productivity/studio/views/dashboard-sales-report.png new file mode 100644 index 0000000000..e684dd09b7 Binary files /dev/null and b/content/applications/productivity/studio/views/dashboard-sales-report.png differ diff --git a/content/applications/productivity/studio/views/form-sales-order.png b/content/applications/productivity/studio/views/form-sales-order.png new file mode 100644 index 0000000000..4524305bd3 Binary files /dev/null and b/content/applications/productivity/studio/views/form-sales-order.png differ diff --git a/content/applications/productivity/studio/views/gantt-planning.png b/content/applications/productivity/studio/views/gantt-planning.png new file mode 100644 index 0000000000..a9fe49f946 Binary files /dev/null and b/content/applications/productivity/studio/views/gantt-planning.png differ diff --git a/content/applications/productivity/studio/views/graph-sales-report.png b/content/applications/productivity/studio/views/graph-sales-report.png new file mode 100644 index 0000000000..4ff4c6112a Binary files /dev/null and b/content/applications/productivity/studio/views/graph-sales-report.png differ diff --git a/content/applications/productivity/studio/views/kanban-project.png b/content/applications/productivity/studio/views/kanban-project.png new file mode 100644 index 0000000000..8d9921adf5 Binary files /dev/null and b/content/applications/productivity/studio/views/kanban-project.png differ diff --git a/content/applications/productivity/studio/views/list-drag-handle.png b/content/applications/productivity/studio/views/list-drag-handle.png new file mode 100644 index 0000000000..a104bc085f Binary files /dev/null and b/content/applications/productivity/studio/views/list-drag-handle.png differ diff --git a/content/applications/productivity/studio/views/list-sales-order.png b/content/applications/productivity/studio/views/list-sales-order.png new file mode 100644 index 0000000000..e1819c73c1 Binary files /dev/null and b/content/applications/productivity/studio/views/list-sales-order.png differ diff --git a/content/applications/productivity/studio/views/map-task.png b/content/applications/productivity/studio/views/map-task.png new file mode 100644 index 0000000000..961130e58e Binary files /dev/null and b/content/applications/productivity/studio/views/map-task.png differ diff --git a/content/applications/productivity/studio/views/pivot-purchase-report.png b/content/applications/productivity/studio/views/pivot-purchase-report.png new file mode 100644 index 0000000000..39f7133541 Binary files /dev/null and b/content/applications/productivity/studio/views/pivot-purchase-report.png differ diff --git a/content/applications/productivity/studio/views/search-project-kanban.png b/content/applications/productivity/studio/views/search-project-kanban.png new file mode 100644 index 0000000000..c27fac0f29 Binary files /dev/null and b/content/applications/productivity/studio/views/search-project-kanban.png differ diff --git a/redirects/15.0.txt b/redirects/15.0.txt index 2d23f68c9c..7ed9fd455a 100644 --- a/redirects/15.0.txt +++ b/redirects/15.0.txt @@ -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