# SOME DESCRIPTIVE TITLE. # Copyright (C) Odoo S.A. # This file is distributed under the same license as the Odoo package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-12-11 10:43+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../../content/applications/studio.rst:6 msgid "Studio" msgstr "" #: ../../content/applications/studio.rst:18 msgid "**Odoo Studio** is a toolbox used to customize Odoo without coding knowledge. For example, in any app, add or modify:" msgstr "" #: ../../content/applications/studio.rst:21 msgid ":doc:`Fields `" msgstr "" #: ../../content/applications/studio.rst:22 msgid ":doc:`Views `" msgstr "" #: ../../content/applications/studio.rst:23 msgid ":doc:`Models `" msgstr "" #: ../../content/applications/studio.rst:24 msgid ":doc:`Automation rules `" msgstr "" #: ../../content/applications/studio.rst:25 msgid ":doc:`Webhooks `" msgstr "" #: ../../content/applications/studio.rst:26 msgid ":doc:`PDF reports `" msgstr "" #: ../../content/applications/studio.rst:27 msgid ":doc:`Approval rules `" msgstr "" #: ../../content/applications/studio.rst:28 msgid "Security rules" msgstr "" #: ../../content/applications/studio.rst:30 msgid "Learn how to :doc:`build an app from scratch `." msgstr "" #: ../../content/applications/studio.rst:34 msgid "To access **Studio**, navigate to the app and model you want to modify, then click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) icon. Alternatively, with any app open, click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) icon and navigate to the relevant app and model." msgstr "" #: ../../content/applications/studio.rst:38 msgid "To close **Studio**, click :guilabel:`Close` in the upper-right corner." msgstr "" #: ../../content/applications/studio.rst:41 msgid "Installing **Studio** in an Odoo database on the *Standard* pricing plan automatically triggers an upsell to the *Custom* pricing plan." msgstr "" #: ../../content/applications/studio.rst:44 msgid "**For yearly or multi-year contracts**: An upsell order is created with a 30-day limit." msgstr "" #: ../../content/applications/studio.rst:45 msgid "**For monthly contracts**: The subscription automatically switches to the *Custom* plan and the new rate is applied when the next bill is generated." msgstr "" #: ../../content/applications/studio.rst:48 msgid "For more information, refer to `Odoo's pricing page `_ or contact your account manager." msgstr "" #: ../../content/applications/studio.rst:52 msgid "`Odoo Tutorials: Studio `_" msgstr "" #: ../../content/applications/studio/approval_rules.rst:3 msgid "Approval rules" msgstr "" #: ../../content/applications/studio/approval_rules.rst:5 msgid "Approval rules are used to automate approval processes for actions. They allow you to define the criteria for when an approval is required before an action can be performed using a button." msgstr "" #: ../../content/applications/studio/approval_rules.rst:9 msgid "Configuration" msgstr "" #: ../../content/applications/studio/approval_rules.rst:11 msgid "To add approval rules with Studio, proceed as follows:" msgstr "" #: ../../content/applications/studio/approval_rules.rst:13 msgid ":ref:`Open Studio ` and switch to the required :doc:`view `." msgstr "" #: ../../content/applications/studio/approval_rules.rst:14 msgid "Select the button to which the rule should be applied." msgstr "" #: ../../content/applications/studio/approval_rules.rst:15 msgid "Click :icon:`fa-plus` :guilabel:`Add an approval step` in the :icon:`fa-server` :guilabel:`Properties` tab." msgstr "" #: ../../content/applications/studio/approval_rules.rst:17 msgid "Specify which users are responsible for approving the action by using one of the following fields or both:" msgstr "" #: ../../content/applications/studio/approval_rules.rst:20 msgid ":guilabel:`Approvers` to specify one or several users;" msgstr "" #: ../../content/applications/studio/approval_rules.rst:21 msgid ":guilabel:`Approver Group` to specify one user group." msgstr "" #: ../../content/applications/studio/approval_rules.rst:24 msgid "An activity is created for all users set as :guilabel:`Approvers` when their approval is requested." msgstr "" #: ../../content/applications/studio/approval_rules.rst:27 msgid "(*optional*) Select the :guilabel:`Users to Notify` via an internal note when the action is approved or rejected." msgstr "" #: ../../content/applications/studio/approval_rules.rst:29 msgid "(*optional*) Add a :guilabel:`Description` to be displayed on the button." msgstr "" #: ../../content/applications/studio/approval_rules.rst:32 msgid "You can specify under which condition(s) an approval step should be applied by clicking the :icon:`fa-filter` (:guilabel:`filter`) icon next to the :guilabel:`Approvers` field." msgstr "" #: ../../content/applications/studio/approval_rules.rst:35 msgid "To add another approval step, click :icon:`fa-plus` :guilabel:`Add an approval step`. When there are multiple steps, you can:" msgstr "" #: ../../content/applications/studio/approval_rules.rst:38 msgid "Enable :guilabel:`Exclusive Approval` on any step so that a user who approves a step cannot approve another step for the same record." msgstr "" #: ../../content/applications/studio/approval_rules.rst:40 msgid "Change the :guilabel:`Approval Order` of the steps by selecting a number, `1` being the first step, `2` the second step, and so on. A user responsible for a higher step can approve/reject previous step(s) unless :guilabel:`Exclusive Approval` is selected." msgstr "" #: ../../content/applications/studio/approval_rules.rst:44 msgid "Click the :icon:`fa-trash` (:guilabel:`trash`) icon next to the :guilabel:`Approvers` field to remove an approval step." msgstr "" #: ../../content/applications/studio/approval_rules.rst:48 msgid "You can create :ref:`user groups ` specifically for approvals." msgstr "" #: ../../content/applications/studio/approval_rules.rst:53 msgid "Use" msgstr "" #: ../../content/applications/studio/approval_rules.rst:55 msgid "Once an approval rule has been defined for a button, a **user avatar** icon is displayed next to the button's label for each approval step. Clicking an icon reveals the step(s)." msgstr "" #: ../../content/applications/studio/approval_rules.rst:-1 msgid "Confirm button with two approval steps" msgstr "" #: ../../content/applications/studio/approval_rules.rst:62 msgid "If an unauthorized user clicks the button, an error message is displayed and an activity is created for the users specified in the :guilabel:`Approvers` field, if any." msgstr "" #: ../../content/applications/studio/approval_rules.rst:65 msgid "Authorized users can:" msgstr "" #: ../../content/applications/studio/approval_rules.rst:67 msgid "Perform the action directly by clicking the button if it is the last/only approval step." msgstr "" #: ../../content/applications/studio/approval_rules.rst:68 msgid "Approve the action and let another user perform it - or move it to the next approval step - by clicking the **user avatar** icon next to the button's label, then clicking the :icon:`fa-check` (:guilabel:`approve`)." msgstr "" #: ../../content/applications/studio/approval_rules.rst:71 msgid "Reject the action by clicking the **user avatar** icon next to the button's label and then the :icon:`fa-times` (:guilabel:`reject`) button." msgstr "" #: ../../content/applications/studio/approval_rules.rst:73 msgid "(only for users selected under the :guilabel:`Approvers` field) Delegate their approval rights to one or several users for **all records** by:" msgstr "" #: ../../content/applications/studio/approval_rules.rst:76 msgid "Clicking the :icon:`oi-view-kanban` (:guilabel:`kanban view`) icon and then :guilabel:`Delegate`." msgstr "" #: ../../content/applications/studio/approval_rules.rst:78 msgid "Selecting one or several :guilabel:`Approvers`, :guilabel:`Until` when they will have approval rights (forever if left empty), and, optionally, the user(s) who should be notified via an internal note using the :guilabel:`Notify to` field." msgstr "" #: ../../content/applications/studio/approval_rules.rst:0 msgid "Delegate to dialog" msgstr "" #: ../../content/applications/studio/approval_rules.rst:86 msgid "A user who approves/rejects an action can revoke their decision by clicking the **user avatar** icon next to the button's label and then the :icon:`fa-undo` (:guilabel:`revoke`) button. They can also revoke the decision of other users for steps with a lower :guilabel:`Approval Order` unless :guilabel:`Exclusive Approval` is enabled." msgstr "" #: ../../content/applications/studio/approval_rules.rst:90 msgid "Approvals are tracked in the record's chatter. An approval entry is also created every time a Studio approval-related action is performed. To access approval entries, :doc:`activate the developer mode ` and go to :menuselection:`Settings --> Technical --> Studio Approval Entries`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:5 msgid "Automation rules" msgstr "" #: ../../content/applications/studio/automated_actions.rst:7 msgid "Automation rules allow the execution of one or more predefined actions in response to a specific trigger, e.g., create an activity when a field is set to a specific value, or archive a record 7 days after its last update." msgstr "" #: ../../content/applications/studio/automated_actions.rst:11 msgid "When creating an automation rule, it is possible to :ref:`add conditions that must be met ` for the automation rule to run, e.g., the opportunity must be assigned to a specific salesperson, or the state of the record must not be :guilabel:`Draft`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:15 msgid "To create an automation rule with **Odoo Studio**:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:17 msgid ":ref:`Open Studio ` and click :guilabel:`Automations`, then :guilabel:`New`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:18 msgid "Give the automation rule a clear, meaningful name that identifies its purpose." msgstr "" #: ../../content/applications/studio/automated_actions.rst:19 msgid "Select the :ref:`Trigger ` and, if necessary, fill in the fields that appear on the screen based on the chosen trigger." msgstr "" #: ../../content/applications/studio/automated_actions.rst:21 msgid "Click :ref:`Add an action ` in the :guilabel:`Actions To Do` tab." msgstr "" #: ../../content/applications/studio/automated_actions.rst:23 msgid "Select the :guilabel:`Type` of action and complete the relevant fields based on the chosen action." msgstr "" #: ../../content/applications/studio/automated_actions.rst:25 msgid "Click :guilabel:`Save & Close` or, to define additional actions, :guilabel:`Save & New`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:29 msgid "To ensure follow-up on less satisfied clients, this automation rule creates an activity 3 months after a sales order is created for clients with a satisfaction percentage lower than 30%." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of an automation rule on the Subscription model" msgstr "" #: ../../content/applications/studio/automated_actions.rst:37 msgid "Use the :guilabel:`Notes` tab to document the purpose and functioning of automation rules. This makes rules easier to maintain and facilitates collaboration between users." msgstr "" #: ../../content/applications/studio/automated_actions.rst:39 msgid "To modify the :doc:`model ` targeted by the automation rule, switch models before clicking :guilabel:`Automations` in Studio, or :ref:`activate developer mode `, create or edit an automation rule, and select the :guilabel:`Model` in the :guilabel:`Automation Rules` form." msgstr "" #: ../../content/applications/studio/automated_actions.rst:43 msgid "Automation rules can be created from any kanban stage by clicking the :icon:`fa-cog` :guilabel:`(Settings)` icon that appears when hovering over the kanban stage name, then selecting :guilabel:`Automations`. In this case, the :guilabel:`Trigger` is set to :guilabel:`Stage is set to` by default, but it can be changed if necessary." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Create automations from a kanban stage" msgstr "" #: ../../content/applications/studio/automated_actions.rst:54 msgid "Trigger" msgstr "" #: ../../content/applications/studio/automated_actions.rst:56 msgid "The :guilabel:`Trigger` is used to define what kind of event needs to occur for the automation rule to run. The available triggers depend on the :doc:`model `. Five trigger categories are available overall:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:60 msgid ":ref:`studio/automated-actions/trigger-values-updated`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:61 msgid ":ref:`studio/automated-actions/trigger-email-events`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:62 msgid ":ref:`studio/automated-actions/trigger-timing-conditions`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:63 msgid ":ref:`studio/automated-actions/trigger-custom`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:64 msgid ":ref:`studio/automated-actions/trigger-external`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:69 msgid "Adding conditions" msgstr "" #: ../../content/applications/studio/automated_actions.rst:71 msgid "Domain filters allow you to determine the records an automation rule should target or exclude. Efficient filtering enhances overall performance as it avoids unnecessary processing on records that are not impacted by the rule." msgstr "" #: ../../content/applications/studio/automated_actions.rst:76 msgid ":ref:`Activate developer mode ` before creating an automation rule to have the most flexibility in adding domain filters." msgstr "" #: ../../content/applications/studio/automated_actions.rst:79 msgid "Depending on the trigger chosen, it is possible to define one or more conditions a record must meet *before* and/or *after* a trigger occurs." msgstr "" #: ../../content/applications/studio/automated_actions.rst:82 msgid "The :guilabel:`Before Update Domain` defines the conditions a record must meet *before* the trigger event occurs, e.g., the record must have `Type = Customer Invoice` and `Status = Posted`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:85 msgid "With developer mode activated, click :guilabel:`Edit Domain`, if available, then :guilabel:`New Rule`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:88 msgid "The :guilabel:`Apply on` domain defines the conditions a record must meet *after* the trigger event occurs, e.g., the customer invoice must have `Payment Status = Partially Paid`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:91 msgid "With developer mode activated, click :guilabel:`Edit Domain` then :guilabel:`New Rule`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:94 msgid "If developer mode is not activated, to define an :guilabel:`Apply on` domain, click :icon:`fa-plus` :guilabel:`Add condition`. Complete or delete the suggested condition. To add a condition, click :guilabel:`New Rule`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:98 msgid "When a :ref:`trigger ` occurs, e.g., the payment status of a posted customer invoice is updated, the automation rule checks the defined conditions and only executes the :ref:`action ` if the record matches those conditions." msgstr "" #: ../../content/applications/studio/automated_actions.rst:103 msgid "If the automated action should be executed when an email address is set for the first time (in contrast to modifying an email address) on an existing contact that is an individual rather than a company, use `Email is not set` and `Is a Company is not set` as the :guilabel:`Before Update Domain` and `Email is set` as the :guilabel:`Apply on` domain." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of a trigger with a Before Update Domain" msgstr "" #: ../../content/applications/studio/automated_actions.rst:113 msgid "The :guilabel:`Before Update Domain` is not checked upon the creation of a record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:118 msgid "Values Updated" msgstr "" #: ../../content/applications/studio/automated_actions.rst:120 msgid "Trigger automated actions when specific changes happen in the database. The triggers available in this category depend on the model and are based on common changes, such as adding a specific tag (e.g., to a task) or setting a field's value (e.g., setting the :guilabel:`User` field)." msgstr "" #: ../../content/applications/studio/automated_actions.rst:124 msgid "Select the trigger, then select a value if required." msgstr "" #: ../../content/applications/studio/automated_actions.rst:129 msgid "Email Events" msgstr "" #: ../../content/applications/studio/automated_actions.rst:131 msgid "Trigger automated actions upon receiving or sending emails." msgstr "" #: ../../content/applications/studio/automated_actions.rst:136 msgid "Timing Conditions" msgstr "" #: ../../content/applications/studio/automated_actions.rst:138 msgid "Trigger automated actions at a point in time relative to a date field or to the creation or update of a record. The following triggers are available:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:141 msgid ":guilabel:`Based on date field`: The action is triggered a defined period of time *before or after* the date of the selected date field, e.g., 30 days before the contract end date." msgstr "" #: ../../content/applications/studio/automated_actions.rst:143 msgid ":guilabel:`After creation`: The action is triggered a defined period of time after a record is created and saved." msgstr "" #: ../../content/applications/studio/automated_actions.rst:145 msgid ":guilabel:`After last update`: The action is triggered a defined period of time after an existing record is edited and saved." msgstr "" #: ../../content/applications/studio/automated_actions.rst:148 msgid "To configure a :guilabel:`Timing Conditions` trigger, with :ref:`developer mode activated `:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:151 msgid "Select the appropriate :guilabel:`Trigger` from the :guilabel:`Timing Conditions` category. If you select the :guilabel:`Based on date field` trigger, select the relevant date field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:153 msgid "Configure the :guilabel:`Delay` to determine the *execution date time* of the action(s). To do so, enter the number of :guilabel:`Minutes`, :guilabel:`Hours`, :guilabel:`Days`, or :guilabel:`Months` after which the action should be triggered. If you selected the :guilabel:`Based on date field` trigger, the action can be triggered :guilabel:`After` or :guilabel:`Before` the selected date field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:158 msgid "Optionally, :ref:`add conditions ` that the record must meet before and/or after the rule is triggered." msgstr "" #: ../../content/applications/studio/automated_actions.rst:160 msgid "Click :icon:`fa-cloud-upload` :guilabel:`Save manually`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:161 msgid "Click :icon:`fa-arrow-right` :guilabel:`Scheduled action` to open the :guilabel:`Automation Rules: check and execute` scheduled action." msgstr "" #: ../../content/applications/studio/automated_actions.rst:165 msgid "This scheduled action checks for execution date times that have been reached since its previous run, and executes the related action(s), if relevant. By default, the scheduled action is set to :guilabel:`Execute Every` 4 hours, which is generally sufficient for delays such as 3 months after the order date or 7 days after the last update." msgstr "" #: ../../content/applications/studio/automated_actions.rst:170 msgid "If any automation rule has a time-based trigger with a delay of less than the equivalent of 40 hours, e.g., 3 hours before the event start date time, the frequency of the scheduled action is automatically increased, e.g., to :guilabel:`Execute Every` 18 minutes. This allows the action to be executed closer to its scheduled execution date time." msgstr "" #: ../../content/applications/studio/automated_actions.rst:175 msgid "Click :guilabel:`Run manually` at the top left." msgstr "" #: ../../content/applications/studio/automated_actions.rst:178 msgid "This step is critical to prevent the rule from running retroactively on historical records. Running the scheduled action manually initializes the timestamp of its *last run* in the automation rule, which is a key element of the rule's :ref:`execution logic `." msgstr "" #: ../../content/applications/studio/automated_actions.rst:183 msgid "Click the automation rule name in the breadcrumbs to return to the automation rule setup." msgstr "" #: ../../content/applications/studio/automated_actions.rst:184 msgid "Add the :ref:`action(s) to be executed ` then, when all actions have been defined, click :icon:`fa-cloud-upload` :guilabel:`Save manually`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:187 msgid "The action is executed the first time the :guilabel:`Automation Rules: check and execute` scheduled action runs after the execution date time is reached, and when the conditions are met." msgstr "" #: ../../content/applications/studio/automated_actions.rst:193 msgid "Execution logic" msgstr "" #: ../../content/applications/studio/automated_actions.rst:195 msgid "When using a time-based trigger, an action is only executed when the execution date time falls *between* the last run of the scheduled action and the current run (whether scheduled or run manually), i.e.:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:199 msgid "**last run --> execution date and time --> current run**" msgstr "" #: ../../content/applications/studio/automated_actions.rst:202 msgid "Running the :guilabel:`Automation Rules: check and execute` scheduled action manually does not necessarily result in a rule's action being executed. When testing an automation rule with a time-based trigger, ensure that this sequence is true, then check if the action has been executed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:208 msgid "On the morning of October 15, you create an automation rule that triggers the sending of an email 30 days before the :guilabel:`Contract end date`; contracts end at 11:59 pm on their contract end date. During the creating of the rule, the :guilabel:`Automation Rules: check and execute` scheduled action was run manually at 11:00 am and is set to run every four hours thereafter." msgstr "" #: ../../content/applications/studio/automated_actions.rst:213 msgid "This new automation rule will apply for contracts whose end date is at least 30 days *after* the creation of the rule, i.e., an end date of November 14 or later." msgstr "" #: ../../content/applications/studio/automated_actions.rst:216 msgid "For a contract with an end date of November 14, the execution date time of the action is 11:59 pm on October 15. The action will therefore be executed the first time the :guilabel:`Automation Rules: check and execute` scheduled action runs after that date and time has passed, i.e.,:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:220 msgid "last run of the scheduled action: 11:00 pm on October 15" msgstr "" #: ../../content/applications/studio/automated_actions.rst:221 msgid "execution date time: 11:59 pm on October 15" msgstr "" #: ../../content/applications/studio/automated_actions.rst:222 msgid "current run of the scheduled action: 3:00 am on October 16" msgstr "" #: ../../content/applications/studio/automated_actions.rst:227 msgid "Custom" msgstr "" #: ../../content/applications/studio/automated_actions.rst:229 msgid "Trigger automated actions:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:231 msgid ":guilabel:`On create`: when a record is saved for the first time." msgstr "" #: ../../content/applications/studio/automated_actions.rst:232 msgid ":guilabel:`On create and edit`: when a record is saved for the first time and any subsequent time." msgstr "" #: ../../content/applications/studio/automated_actions.rst:233 msgid ":guilabel:`On deletion`: when a record is deleted." msgstr "" #: ../../content/applications/studio/automated_actions.rst:234 msgid ":guilabel:`On UI change`: when a field's value is changed on the :ref:`Form view `, even before the record is saved." msgstr "" #: ../../content/applications/studio/automated_actions.rst:237 msgid "For the :guilabel:`On create and edit` and :guilabel:`On UI change` triggers, you **must** then select the field(s) to be used to trigger the automation rule in the :guilabel:`When updating` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:242 msgid "If no field is selected in the :guilabel:`When updating` field, the automated action may be executed multiple times per record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:245 msgid "Optionally, you can also define additional conditions to be met to trigger the automation rule in the :guilabel:`Apply on` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:249 msgid "The :guilabel:`On UI change` trigger can only be used with the :ref:`Execute Code ` action and only works when a modification is made manually. The action is not executed if the field is changed through another automation rule." msgstr "" #: ../../content/applications/studio/automated_actions.rst:256 msgid "External" msgstr "" #: ../../content/applications/studio/automated_actions.rst:258 msgid "Trigger automated actions based on a specific event in an external system or application using a :doc:`webhook `." msgstr "" #: ../../content/applications/studio/automated_actions.rst:261 msgid "After the webhook is configured in Odoo, where the webhook's URL is generated and the target record defined, it needs to be implemented in the external system." msgstr "" #: ../../content/applications/studio/automated_actions.rst:265 #: ../../content/applications/studio/automated_actions/webhooks.rst:6 msgid "It is *highly recommended* to consult with a developer, solution architect, or another technical role when deciding to use webhooks and throughout the implementation process. If not properly configured, webhooks may disrupt the Odoo database and can take time to revert." msgstr "" #: ../../content/applications/studio/automated_actions.rst:-1 msgid "Example of a Based on date field trigger" msgstr "" #: ../../content/applications/studio/automated_actions.rst:274 msgid "It is also possible to set up an automated action that :ref:`sends data to a external system's webhook ` when an event occurs in your Odoo database." msgstr "" #: ../../content/applications/studio/automated_actions.rst:278 msgid ":doc:`Webhook documentation `" msgstr "" #: ../../content/applications/studio/automated_actions.rst:283 msgid "Actions" msgstr "" #: ../../content/applications/studio/automated_actions.rst:285 msgid "Once you have defined the automation rule's :ref:`trigger `, click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the action(s) to be executed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:290 msgid "If no explicit name is entered, the name of the action will be automatically generated based on the action you define; the name can be updated at any time." msgstr "" #: ../../content/applications/studio/automated_actions.rst:292 msgid "You can define multiple actions for the same automation rule. By default, actions are executed in the order in which they were defined." msgstr "" #: ../../content/applications/studio/automated_actions.rst:295 msgid "This means, for example, that if you define an :guilabel:`Update record` action and then a :guilabel:`Send email` action where the email references the field that was updated, the email uses the updated values. However, if the :guilabel:`Send email` action is defined before the :guilabel:`Update record` action, the email uses the values set *before* the record is updated." msgstr "" #: ../../content/applications/studio/automated_actions.rst:300 msgid "To change the order of defined actions, click the :icon:`oi-draggable` :guilabel:`(drag handle)` icon beside an action and drag it to the desired position." msgstr "" #: ../../content/applications/studio/automated_actions.rst:306 msgid "Update Record" msgstr "" #: ../../content/applications/studio/automated_actions.rst:308 msgid "This action is used to update one of the record's (related) fields. The following options are available:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:311 msgid ":guilabel:`Update`: updates the selected field with the specified value." msgstr "" #: ../../content/applications/studio/automated_actions.rst:312 msgid ":guilabel:`Update with AI`: updates the selected field dynamically based on the AI prompt provided. This option requires the **Odoo AI** app to be installed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:314 msgid ":guilabel:`Sequence`: update the selected field with a defined sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:315 msgid ":guilabel:`Compute`: updates the selected field dynamically using Python code." msgstr "" #: ../../content/applications/studio/automated_actions.rst:317 #: ../../content/applications/studio/automated_actions.rst:423 #: ../../content/applications/studio/automated_actions.rst:463 #: ../../content/applications/studio/automated_actions.rst:502 msgid "To define the action:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:319 msgid "With the :guilabel:`Update`, :guilabel:`Update with AI`, :guilabel:`Sequence` or :guilabel:`Compute` option selected, as relevant, select or search for the field to be updated or computed. If needed, click the :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name to access the list of related fields." msgstr "" #: ../../content/applications/studio/automated_actions.rst:323 msgid "Provide the relevant information based on the option selected." msgstr "" #: ../../content/applications/studio/automated_actions.rst:326 msgid "Update" msgstr "" #: ../../content/applications/studio/automated_actions.rst:328 msgid "Select or enter the updated value for the field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:330 msgid "If a :ref:`many2many field ` is being updated, choose whether the field must be updated by :guilabel:`Adding`, :guilabel:`Removing`, or :guilabel:`Setting it to` the selected value or by :guilabel:`Clearing it`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:335 msgid "If you want the automated action to remove a tag from the customer record, set the :guilabel:`Update` field to :guilabel:`Customer > Tags`, select :guilabel:`by Removing`, then select the tag to be removed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of an Update Record action" msgstr "" #: ../../content/applications/studio/automated_actions.rst:344 msgid "Update with AI" msgstr "" #: ../../content/applications/studio/automated_actions.rst:346 msgid "Enter a prompt to instruct Odoo AI how to update the field. Type `/` to open the :guilabel:`AI prompt tools`; use :guilabel:`Field Selector` to tell Odoo AI which related fields to check for context, and :guilabel:`Records Selector` to provide possible values for the updated field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:351 msgid "If you want the automation rule to update the :guilabel:`Assignees` field of a newly created task based on the employees' expertise, you can write a prompt to instruct Odoo AI to check the :guilabel:`Display Name` field of the task for the context, then to assign the most suitable employee." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of updating a record using AI" msgstr "" #: ../../content/applications/studio/automated_actions.rst:361 msgid "Sequence" msgstr "" #: ../../content/applications/studio/automated_actions.rst:363 msgid "Select an existing sequence or, to create a new sequence:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:365 msgid "Click :guilabel:`Search more`, then click :guilabel:`New`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:366 msgid "In the window that opens, enter the :guilabel:`Name` of the sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:367 msgid "In the :guilabel:`Sequence` tab, configure the sequence:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:369 msgid ":guilabel:`Prefix`: characters added *before* the next number in the sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:370 msgid ":guilabel:`Suffix`: characters added *after* the next number in the sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:371 msgid ":guilabel:`Sequence Size`: determines the number of digits in every number in the sequence. If needed, leading zeros are added before the number to achieve the indicated sequence size, e.g., for a sequence size of `5`, the first number in the sequence is `00001`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:374 msgid ":guilabel:`Step`: determines the increments between the numbers in the sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:375 msgid ":guilabel:`Next Number`: the next number that will be used in the sequence, without leading zeros." msgstr "" #: ../../content/applications/studio/automated_actions.rst:379 msgid "Use dynamic placeholders like `%(year)s` or `%(month)s` as a :guilabel:`Prefix` and/or :guilabel:`Suffix` to create sequences with elements like current year, month, etc. Possible placeholders are shown at the bottom of the window." msgstr "" #: ../../content/applications/studio/automated_actions.rst:382 msgid "To use sub-sequences, e.g., to have the sequence restart each year or each month, enable :guilabel:`Use subsequences per date_range`, then :guilabel:`Add a line` for each date range and indicate the :guilabel:`Next Number` for the range." msgstr "" #: ../../content/applications/studio/automated_actions.rst:386 msgid "Click :guilabel:`Save`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:389 msgid "If you want the automated action to create a sequential customer reference each time a new customer is created, set the :guilabel:`Sequence` field to :guilabel:`Reference`, then, in the dropdown, click :guilabel:`Search more`. Click :guilabel:`New` to create a new sequence." msgstr "" #: ../../content/applications/studio/automated_actions.rst:393 msgid "In the example, each new customer receives a sequential reference with the prefix `#-REF-%(year)s-`, where `%(year)s` is the current year including the century, and the suffix `/CL`, e.g., `#-REF-2025-00001/CL`, `#-REF-2025-00002/CL`, etc." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of an Update Record action using a sequence" msgstr "" #: ../../content/applications/studio/automated_actions.rst:402 msgid "Compute" msgstr "" #: ../../content/applications/studio/automated_actions.rst:404 msgid "Enter the code to be used for computing the field's value." msgstr "" #: ../../content/applications/studio/automated_actions.rst:407 msgid "If you want the automation rule to compute a custom :ref:`datetime field `, :guilabel:`Escalated on`, when a task's priority is set to `Very high` (three stars), you can define the trigger :guilabel:`Priority is set to` to `Very High` and define the :guilabel:`Update Record` action as follows:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Compute a custom datetime field using a Python expression" msgstr "" #: ../../content/applications/studio/automated_actions.rst:419 msgid "Create Record and Duplicate Record" msgstr "" #: ../../content/applications/studio/automated_actions.rst:421 msgid "These actions are used to create a new or duplicated record on any model." msgstr "" #: ../../content/applications/studio/automated_actions.rst:425 msgid "With :guilabel:`Create Record` or :guilabel:`Duplicate Record` selected as the :guilabel:`Type` of action, as relevant, select the required model in the :guilabel:`Record to Create` field; the field contains the current model by default." msgstr "" #: ../../content/applications/studio/automated_actions.rst:428 msgid "Specify a :guilabel:`Name` for the record, or, if the action duplicates a record, indicate the record being duplicated in the :guilabel:`Duplicate from` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:430 msgid "If the new or duplicated record is being created on another model, select a field in the :guilabel:`Link Field` field to link the record that triggered the creation of the new or duplicated record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:435 msgid "The :guilabel:`Link Field` dropdown menu only contains :ref:`one2many fields ` existing on the current model that are linked to a :ref:`many2one field ` on the target model." msgstr "" #: ../../content/applications/studio/automated_actions.rst:440 msgid "If you want the automation rule to duplicate a project, e.g. a project template with predefined tasks, when an opportunity is set to `Won`, add a custom `Related opportunity` :ref:`many2one field ` field on the *Project* model and a custom `Related project` :ref:`one2many field ` field on the *Lead* model, then provide the following details about the record being duplicated:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Duplicate a record in a different model" msgstr "" #: ../../content/applications/studio/automated_actions.rst:451 msgid "You can create another automation rule with :ref:`studio/automated-actions/action-update-record` actions to update the fields of the new or duplicated record if necessary. For example, you can use a :guilabel:`Create Record` action to create a new project task and then assign it to a specific user using an :guilabel:`Update Record` action." msgstr "" #: ../../content/applications/studio/automated_actions.rst:459 msgid "Create Activity" msgstr "" #: ../../content/applications/studio/automated_actions.rst:461 msgid "This action is used to schedule a new activity linked to the record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:465 msgid "With :guilabel:`Create Activity` selected as the :guilabel:`Type` of action, select the appropriate :guilabel:`Activity Type` from the dropdown menu." msgstr "" #: ../../content/applications/studio/automated_actions.rst:467 msgid "Enter a :guilabel:`Title`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:468 msgid "Indicate by when the activity should be completed by specifying a number of :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months` in the :guilabel:`Due Date In` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:470 msgid "Select a :guilabel:`User type`:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:472 msgid "To always assign the activity to the same user, select :guilabel:`Specific User`, then add the user in the :guilabel:`Responsible` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:474 msgid "To target a user linked to the record dynamically, select :guilabel:`Dynamic User (based on record)`. If needed, change the :guilabel:`User Field` by clicking on the placeholder field name then selecting or searching for the user field in the list that appears. Clicking the :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name allows you to access related fields if needed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:479 msgid "Optionally, add a :guilabel:`Note` to provide more information about the activity." msgstr "" #: ../../content/applications/studio/automated_actions.rst:482 msgid "After a proposition is sent to a opportunity with a high expected revenue, you want to create an activity for the salesperson's team leader to call the potential client to increase the chances of closing the deal." msgstr "" #: ../../content/applications/studio/automated_actions.rst:486 msgid "To do so, set the :guilabel:`Activity Type` to :guilabel:`Call` and the :guilabel:`User Type` to :guilabel:`Dynamic User (based on record)`. Click on the placeholder field and select :guilabel:`Sales Team`, then click the :icon:`oi-chevron-right` :guilabel:`(right arrow)` and select :guilabel:`Team Leader`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of a Create Activity action" msgstr "" #: ../../content/applications/studio/automated_actions.rst:498 msgid "Send Email and Send SMS" msgstr "" #: ../../content/applications/studio/automated_actions.rst:500 msgid "These actions are used to send an email or a text message to a contact linked to a specific record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:504 msgid "With :guilabel:`Send Email` or :guilabel:`Send SMS` selected as the :guilabel:`Type` of action, as relevant, select or create an :guilabel:`Email Template` or :guilabel:`SMS Template`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:506 msgid "In the :guilabel:`Send Email As` or :guilabel:`Send SMS As` field, choose how you want to send the email or text message." msgstr "" #: ../../content/applications/studio/automated_actions.rst:509 msgid "For an email, select:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:511 msgid ":guilabel:`Email`: to send the message as an email to the recipients of the :guilabel:`Email Template`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:513 msgid ":guilabel:`Message`: to post the message on the record and notify the record's followers." msgstr "" #: ../../content/applications/studio/automated_actions.rst:514 msgid ":guilabel:`Note`: to send the message as an internal note visible to internal users in the chatter." msgstr "" #: ../../content/applications/studio/automated_actions.rst:517 msgid "For a text message, select:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:519 msgid ":guilabel:`SMS (without note)`: to send the message as a text message to the recipients of the :guilabel:`SMS template`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:521 msgid ":guilabel:`SMS (with note)`: to send the message as a text message to the recipients of the :guilabel:`SMS template` and post it as an internal note in the chatter." msgstr "" #: ../../content/applications/studio/automated_actions.rst:523 msgid ":guilabel:`Note only`: to only post the message as an internal note in the chatter." msgstr "" #: ../../content/applications/studio/automated_actions.rst:528 msgid "Send WhatsApp" msgstr "" #: ../../content/applications/studio/automated_actions.rst:531 msgid "To automate the sending of WhatsApp messages, one or more :ref:`WhatsApp templates ` must be created." msgstr "" #: ../../content/applications/studio/automated_actions.rst:534 msgid "This action is used to send a WhatsApp message to a contact linked to a specific record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:536 msgid "With :guilabel:`Send WhatsApp` selected as the :guilabel:`Type` of action, select the appropriate :guilabel:`WhatsApp Template` from the dropdown menu." msgstr "" #: ../../content/applications/studio/automated_actions.rst:542 msgid "Add Followers and Remove Followers" msgstr "" #: ../../content/applications/studio/automated_actions.rst:544 msgid "This action is used to subscribe/unsubscribe existing contacts as followers of the record." msgstr "" #: ../../content/applications/studio/automated_actions.rst:546 msgid "With :guilabel:`Add Followers` or :guilabel:`Remove Followers` selected as the :guilabel:`Type` of action, as relevant, select a :guilabel:`Followers Type`:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:549 msgid "To always add/remove the same contact(s), select :guilabel:`Specific Followers` then select the contact(s) from the dropdown menu. Multiple contacts can be added/removed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:552 msgid "To add/remove a contact linked to the record dynamically, select :guilabel:`Dynamic Followers`. If needed, change the :guilabel:`Followers Field` by clicking on the placeholder field name then selecting or searching for the partner field in the list that appears. Clicking the :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name allows you to access related fields if needed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:559 msgid "To keep customers informed of progress on a project, this automated action adds the relevant customer as a follower when a project task is set to `In progress`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Adding the customer as a follower when project task set to in progress" msgstr "" #: ../../content/applications/studio/automated_actions.rst:569 msgid "Execute Code" msgstr "" #: ../../content/applications/studio/automated_actions.rst:572 msgid "For automation rules that require the execution of :ref:`custom code `, note that maintenance of custom code is not included in the *Standard* or *Custom* pricing plans and incurs :ref:`additional fees `." msgstr "" #: ../../content/applications/studio/automated_actions.rst:577 msgid "This action is used to execute Python code. You can write your code into the :guilabel:`Code` tab using the following variables:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:580 msgid "`env`: environment on which the action is triggered" msgstr "" #: ../../content/applications/studio/automated_actions.rst:581 msgid "`model`: model of the record on which the action is triggered; is a void recordset" msgstr "" #: ../../content/applications/studio/automated_actions.rst:582 msgid "`record`: record on which the action is triggered; may be void" msgstr "" #: ../../content/applications/studio/automated_actions.rst:583 msgid "`records`: recordset of all records on which the action is triggered in multi-mode; this may be left empty" msgstr "" #: ../../content/applications/studio/automated_actions.rst:585 msgid "`time`, `datetime`, `dateutil`, `timezone`: useful Python libraries" msgstr "" #: ../../content/applications/studio/automated_actions.rst:586 msgid "`float_compare`: utility function to compare floats based on specific precision" msgstr "" #: ../../content/applications/studio/automated_actions.rst:587 msgid "`log(message, level='info')`: logging function to record debug information in ir.logging table" msgstr "" #: ../../content/applications/studio/automated_actions.rst:589 msgid "`_logger.info(message)`: logger to emit messages in server logs" msgstr "" #: ../../content/applications/studio/automated_actions.rst:590 msgid "`UserError`: exception class for raising user-facing warning messages" msgstr "" #: ../../content/applications/studio/automated_actions.rst:591 msgid "`Command`: x2many commands namespace" msgstr "" #: ../../content/applications/studio/automated_actions.rst:592 msgid "`action = {...}`: to return an action" msgstr "" #: ../../content/applications/studio/automated_actions.rst:595 msgid "The available variables are described both in the :guilabel:`Code` and :guilabel:`Help` tabs." msgstr "" #: ../../content/applications/studio/automated_actions.rst:598 msgid ":doc:`Odoo's ORM capabilities <../../developer/reference/backend/orm>`" msgstr "" #: ../../content/applications/studio/automated_actions.rst:603 msgid "Send Webhook Notification" msgstr "" #: ../../content/applications/studio/automated_actions.rst:605 msgid "This action is used to send a `POST` API request with the values of the selected :guilabel:`Fields` to the webhook URL specified in the :guilabel:`URL` field." msgstr "" #: ../../content/applications/studio/automated_actions.rst:608 msgid "The :guilabel:`Sample Payload` provides a preview of the data included in the request using a random record's data or dummy data if no record is available." msgstr "" #: ../../content/applications/studio/automated_actions.rst:612 msgid "It is also possible to set up an automated action that :doc:`uses a webhook to receive data from an external system ` when a predefined event occurs in that system." msgstr "" #: ../../content/applications/studio/automated_actions.rst:618 msgid "Multi Actions" msgstr "" #: ../../content/applications/studio/automated_actions.rst:620 msgid "This action is used to trigger multiple actions (linked to the current model) at the same time." msgstr "" #: ../../content/applications/studio/automated_actions.rst:622 msgid "To define the actions:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:624 msgid "With :guilabel:`Multi Actions` selected as the :guilabel:`Type` of action, click :guilabel:`Add an action`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:626 msgid "In the :guilabel:`Add: Child Actions` pop-up:" msgstr "" #: ../../content/applications/studio/automated_actions.rst:628 msgid "select one or more existing actions and click :guilabel:`Select`; or" msgstr "" #: ../../content/applications/studio/automated_actions.rst:629 msgid "click :guilabel:`New`, define the action to be executed, then click :guilabel:`Save & Close` or, to create additional actions, :guilabel:`Save & New` ." msgstr "" #: ../../content/applications/studio/automated_actions.rst:631 msgid "Repeat as many times as needed." msgstr "" #: ../../content/applications/studio/automated_actions.rst:-1 msgid "Define multiple actions to be executed" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:3 msgid "Webhooks" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:10 msgid "Webhooks, which can be created in **Odoo Studio**, allow you to automate an action in your Odoo database when a specific event occurs in another, external system." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:13 msgid "In practice, this works as follows: when the event occurs in the external system, a data file (the \"payload\") is sent to the Odoo webhook's URL via a `POST` API request, and a predefined action is performed in your Odoo database." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:17 msgid "Unlike scheduled actions, which run at predefined intervals, or manual API requests, which need to be explicitly invoked, webhooks enable real-time, event-driven communication and automation. For example, you can set up a webhook to have your Odoo inventory data updated automatically when a sales order is confirmed in an external point-of-sale system." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:22 msgid "Setting up a webhook in Odoo requires no coding when connecting two Odoo databases, but :ref:`testing a webhook ` requires an external tool. :ref:`Custom target records or actions ` may require programming skills." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:28 msgid "This article covers creating a webhook that *receives* data from an external source. However, it is also possible to create an automated action that :ref:`sends data to an external webhook ` when a change occurs in your Odoo database." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:35 msgid "Create a webhook in Odoo" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:38 msgid "Before implementing a webhook in a live database, configure and test it using a :ref:`duplicate database ` to ensure the webhook performs as intended." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:42 msgid ":ref:`Activating developer mode ` before creating up a webhook gives greater flexibility in selecting the :doc:`model <../models_modules_apps>` the automation rule targets. It also allows you to find the technical name of the model and fields, which may be needed to configure the payload." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:47 msgid "To find a model's technical name, with developer mode activated, hover over the model name and then click :icon:`fa-arrow-right` :guilabel:`(Internal link)`. The technical name can be found in the :guilabel:`Model` field. For example, a sales order webhook uses the *Sales Order* model, but the technical name `sale.order` is used in the payload." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:52 msgid "To create a webhook in **Studio**, proceed as follows:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:54 msgid ":ref:`Open Studio ` and click :guilabel:`Webhooks`, then :guilabel:`New`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:55 msgid "Give the webhook a clear, meaningful name that identifies its purpose." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:56 msgid "If needed, and provided developer mode is activated, select the appropriate :guilabel:`Model` from the dropdown. If developer mode is not activated, the automation rule targets the current model by default." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:60 msgid "The webhook's URL is automatically generated, but can be changed if needed by clicking :guilabel:`Rotate Secret`. This is the URL that should be used when implementing the webhook in the external system that will send updates to the database." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:65 msgid "The URL is **confidential** and should be treated with care. Sharing it online or without caution can provide unintended access to the Odoo database. If the URL is updated after the initial implementation, make sure to update it in the external system." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:69 msgid "If desired, enable :guilabel:`Log Calls` to track the history of API requests made to the webhook's URL, e.g., for troubleshooting purposes." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:72 msgid "If the system sending the webhook is not Odoo, adjust the :guilabel:`Target Record` code to look for the JSON record included in the payload when the API request is made to the webhook's URL. If the system sending the webhook is an Odoo database, ensure that the `id` and `model` appear in the payload." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:77 msgid "If the webhook is used to create records in the Odoo database, use `model.browse(i)` or `model.search(i)` instead of the default :guilabel:`Target Record` format." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:80 msgid "Click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the :ref:`actions ` to be executed." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:82 msgid "Before implementing the webhook in the external system, :ref:`test ` it to ensure it works as intended." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:86 msgid "Webhooks can also be created via the :guilabel:`Automations` menu in **Studio** by selecting the trigger :guilabel:`On webhook`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:88 msgid "To access the history of API requests if :guilabel:`Log Calls` has been enabled, click the :guilabel:`Logs` smart button at the top of the :guilabel:`Automation rules` form." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:90 msgid "If the purpose of the webhook is anything other than to update an existing record, e.g., to create a new record, the :guilabel:`Execute Code` action must be chosen." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:96 msgid "Test a webhook" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:98 msgid "Testing a webhook requires a test payload and an external tool or system, like `Postman `_, to send the payload via a `POST` API request. This section presents the steps to test a webhook in Postman." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:103 msgid "See the :ref:`webhook use cases section ` for step-by-step explanations of how to test webhooks using test payloads." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:105 msgid "To get specific help with testing a webhook with Postman, contact their support team." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:107 msgid "In Postman, create a new HTTP request and set its method to :guilabel:`POST`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:108 msgid "Copy the webhook's URL from your Odoo database using the :icon:`fa-link` :guilabel:`(link)` icon and paste it into the URL field in Postman." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:110 #: ../../content/applications/studio/automated_actions/webhooks.rst:192 #: ../../content/applications/studio/automated_actions/webhooks.rst:267 msgid "Click the :guilabel:`Body` tab and select :guilabel:`raw`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:111 msgid "Set the file type to :guilabel:`JSON`, then copy the code from the test payload and paste it into the code editor." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:113 #: ../../content/applications/studio/automated_actions/webhooks.rst:206 #: ../../content/applications/studio/automated_actions/webhooks.rst:281 msgid "Click :guilabel:`Send`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:117 msgid "In the :guilabel:`Response` viewer at the bottom of the screen in Postman, details, including a HTTP response code, indicate whether or not the webhook is functioning correctly." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:120 msgid "A `200 OK` or `status: ok` message indicates that the webhook is functioning properly on Odoo's side. From here, implementation can begin with the other system to automatically send the API requests to the Odoo webhook's URL." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:124 msgid "If any other response is returned, the number associated with it helps to identify the problem. For example, a `500 Internal Server Error` message means that Odoo could not interpret the call properly. In this case, ensure the fields found in the JSON file are properly mapped in the webhook's configuration and in the system sending the test call." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:130 msgid "Turning on call logging in the webhook's configuration in Odoo provides error logs if the webhook is not functioning as intended." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:134 msgid "Implement a webhook in an external system" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:136 msgid "When the webhook has been successfully created in Odoo and tested, implement it in the system that sends data to the Odoo database, making sure the `POST` API requests are sent to the webhook's URL." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:142 msgid "Webhook use cases" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:144 msgid "Below are two examples of how to use webhooks in Odoo. A test payload is provided for each example, and can be found in the section on testing the webhook. `Postman `_ is used to send the test payload." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:149 msgid "Update a sales order's currency" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:151 msgid "This webhook updates a sales order in the **Sales** app to `USD` when the external system sends a `POST` API request to the webhook's URL that includes that sales order number (which is identified by the payload's `id` record)." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:155 msgid "This could be useful for subsidiaries outside the United States with a mother company located inside the United States or during mergers when consolidating data into one Odoo database." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:159 #: ../../content/applications/studio/automated_actions/webhooks.rst:221 msgid "Create the webhook" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:161 #: ../../content/applications/studio/automated_actions/webhooks.rst:223 msgid "To create this webhook, proceed as follows:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:163 msgid "Open the **Sales** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. The *Sales Order* model is selected by default." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:165 #: ../../content/applications/studio/automated_actions/webhooks.rst:227 msgid "Click :guilabel:`New`. The :guilabel:`Trigger` is set to :guilabel:`On webhook` by default." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:166 msgid "Set the :guilabel:`Target Record` to `model.env[payload.get('_model')].browse(int(payload.get('_id')))`, where:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:169 msgid "`payload.get('_model')` retrieves the value associated with the `model` key in the payload, i.e., `sale.order`, which is the technical name of the *Sales Order* model." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:171 msgid "`payload.get('_id')` retrieves the value associated with the `id` key in the payload, i.e., the number of the target sales order in your Odoo database with the `S` and leading zeros removed." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:174 msgid "`int` converts the retrieved id to an integer (i.e., a whole number) because the method `browse()` can only be used with an integer." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:177 #: ../../content/applications/studio/automated_actions/webhooks.rst:231 msgid "Click :guilabel:`Add an action`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:178 msgid "In the :guilabel:`Type` section, click :guilabel:`Update Record`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:179 msgid "In the :guilabel:`Action details` section, select :guilabel:`Update`, choose the field :guilabel:`Currency`, and select :guilabel:`USD`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:181 #: ../../content/applications/studio/automated_actions/webhooks.rst:256 msgid "Click :guilabel:`Save & Close`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:184 #: ../../content/applications/studio/automated_actions/webhooks.rst:259 msgid "Test the webhook" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:186 #: ../../content/applications/studio/automated_actions/webhooks.rst:261 msgid "To test this webhook, proceed as follows:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:188 msgid "With `Postman `_ open, create a new HTTP request and set its method to :guilabel:`POST`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:190 #: ../../content/applications/studio/automated_actions/webhooks.rst:265 msgid "Copy the URL of the Odoo webhook using the :icon:`fa-link` :guilabel:`(link)` icon and paste it into the URL field in Postman." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:193 #: ../../content/applications/studio/automated_actions/webhooks.rst:268 msgid "Set the file type to :guilabel:`JSON`, then copy this code, i.e., the payload, and paste it into the code editor:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:203 msgid "In your Odoo database, choose a sales order to test the webhook on. In the pasted code, replace `SALES ORDER NUMBER` with the sales order's number without the `S` or any zeros before the number. For example, a sales order with the number `S00007` should be entered as `7` in Postman." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:207 #: ../../content/applications/studio/automated_actions/webhooks.rst:282 msgid "Consult the :ref:`Response viewer ` in Postman to determine whether or not the webhook is functioning properly. If a message other than `200 OK` or `status: ok` is returned, the number associated with the message helps to identify the problem." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:214 msgid "Create a new contact" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:216 msgid "This webhook uses custom code to create a new contact in an Odoo database when the external system sends a `POST` API request to the webhook's URL that includes the contact's information. This could be helpful for automatically creating new vendors or customers." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:225 msgid "Open the **Contacts** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. The *Contact* model is selected by default." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:228 msgid "Set the :guilabel:`Target Record` to `model.browse([2])`. This is essentially a placeholder as the code in the automated action tells the webhook what needs to be retrieved from the payload and in which model the record needs to be created." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:232 msgid "In the :guilabel:`Type` section, click :guilabel:`Execute Code`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:233 msgid "Copy this code and paste it into the code editor in the :guilabel:`Code` tab of the :guilabel:`Action details` section:" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:263 msgid "In `Postman `_, create a new HTTP request and set its method to :guilabel:`POST`." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:279 msgid "In the pasted code, replace the `CONTACT NAME`, `CONTACTEMAIL@EMAIL.COM`, and `CONTACT PHONE NUMBER` with a new contact's information." msgstr "" #: ../../content/applications/studio/fields.rst:3 msgid "Fields and widgets" msgstr "" #: ../../content/applications/studio/fields.rst:5 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:10 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:14 msgid ":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)`." msgstr "" #: ../../content/applications/studio/fields.rst:21 msgid "Simple fields" msgstr "" #: ../../content/applications/studio/fields.rst:23 msgid "Simple fields contain basic values, such as text, numbers, files, etc." msgstr "" #: ../../content/applications/studio/fields.rst:26 msgid "Non-default widgets, when available, are presented as bullet points or sub-headings below." msgstr "" #: ../../content/applications/studio/fields.rst:31 msgid "Text (`char`)" msgstr "" #: ../../content/applications/studio/fields.rst:33 msgid "The :guilabel:`Text` field is used for short text containing any character. One text line is displayed when filling out the field." msgstr "" #: ../../content/applications/studio/fields.rst:36 #: ../../content/applications/studio/fields.rst:258 msgid ":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." msgstr "" #: ../../content/applications/studio/fields.rst:38 #: ../../content/applications/studio/fields.rst:70 msgid ":guilabel:`Copy to Clipboard`: users can copy the value by clicking a button." msgstr "" #: ../../content/applications/studio/fields.rst:39 msgid ":guilabel:`E-mail`: the value becomes a clickable *mailto* link." msgstr "" #: ../../content/applications/studio/fields.rst:40 msgid ":guilabel:`Image`: displays an image using a URL. The value cannot be edited manually, but a default value can be set." msgstr "" #: ../../content/applications/studio/fields.rst:44 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:49 msgid ":guilabel:`Phone`: the value becomes a clickable *tel* link." msgstr "" #: ../../content/applications/studio/fields.rst:52 msgid "Tick :guilabel:`Enable SMS` to add an option to send an SMS directly from Odoo next to the field." msgstr "" #: ../../content/applications/studio/fields.rst:55 msgid ":guilabel:`URL`: the value becomes a clickable URL." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Text fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:65 msgid "Multiline Text (`text`)" msgstr "" #: ../../content/applications/studio/fields.rst:67 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Multiline Text fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:80 msgid "Integer (`integer`)" msgstr "" #: ../../content/applications/studio/fields.rst:82 msgid "The :guilabel:`Integer` field is used for all integer numbers (:dfn:`positive, negative, or zero, without a decimal`)." msgstr "" #: ../../content/applications/studio/fields.rst:85 msgid ":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." msgstr "" #: ../../content/applications/studio/fields.rst:87 #: ../../content/applications/studio/fields.rst:115 msgid ":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." msgstr "" #: ../../content/applications/studio/fields.rst:89 msgid ":guilabel:`Handle`: displays a drag handle icon to order records manually in :ref:`List view `." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Integer fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:100 msgid "Decimal (`float`)" msgstr "" #: ../../content/applications/studio/fields.rst:102 msgid "The :guilabel:`Decimal` field is used for all decimal numbers (:dfn:`positive, negative, or zero, with a decimal`)." msgstr "" #: ../../content/applications/studio/fields.rst:106 msgid "Decimal numbers are displayed with two decimals after the decimal point on the UI, but they are stored in the database with more precision." msgstr "" #: ../../content/applications/studio/fields.rst:109 msgid ":guilabel:`Monetary`: it is similar to using the :ref:`Monetary field `. It is recommended to use the latter as it offers more functionalities." msgstr "" #: ../../content/applications/studio/fields.rst:112 msgid ":guilabel:`Percentage`: displays a percent character `%` after the value." msgstr "" #: ../../content/applications/studio/fields.rst:113 msgid ":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." msgstr "" #: ../../content/applications/studio/fields.rst:117 msgid ":guilabel:`Time`: the value must follow the *hh:mm* format, with a maximum of 59 minutes." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Decimal fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:127 msgid "Monetary (`monetary`)" msgstr "" #: ../../content/applications/studio/fields.rst:129 msgid "The :guilabel:`Monetary` field is used for all monetary values." msgstr "" #: ../../content/applications/studio/fields.rst:132 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Example of a Monetary field along with its Currency field" msgstr "" #: ../../content/applications/studio/fields.rst:144 msgid "Html (`html`)" msgstr "" #: ../../content/applications/studio/fields.rst:146 msgid "The :guilabel:`Html` field is used to add text that can be edited using the Odoo HTML editor." msgstr "" #: ../../content/applications/studio/fields.rst:148 msgid ":guilabel:`Multiline Text`: disables the Odoo HTML editor to allow editing raw HTML." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Html fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:158 msgid "Date (`date`)" msgstr "" #: ../../content/applications/studio/fields.rst:160 msgid "The :guilabel:`Date` field is used to select a date on a calendar." msgstr "" #: ../../content/applications/studio/fields.rst:162 msgid ":guilabel:`Remaining Days`: the remaining number of days before the selected date is displayed (e.g., *In 5 days*), based on the current date. This field should be set to :guilabel:`Read only`." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Date fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:173 msgid "Date & Time (`datetime`)" msgstr "" #: ../../content/applications/studio/fields.rst:175 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:180 msgid "As well as :ref:`general properties `, some :ref:`specific properties ` are available for :guilabel:`Date & Time` fields that have the :guilabel:`Date & Time` or :guilabel:`Date Range` widget set." msgstr "" #: ../../content/applications/studio/fields.rst:186 msgid "Date Range (`daterange`)" msgstr "" #: ../../content/applications/studio/fields.rst:188 msgid "The :guilabel:`Date Range` widget is used to display a period of time defined by a start date and an end date in a single line. A date range can have a mandatory start and end date, e.g., for a multi-day event, or allow an optional start or end date, e.g., for a field service intervention or a project task." msgstr "" #: ../../content/applications/studio/fields.rst:193 msgid "Adding a date range requires two fields: a :guilabel:`Date & Time` field with the :guilabel:`Date Range` widget set and another field that is selected as the start date *or* end date. This underlying field can be an existing :ref:`Date ` or :guilabel:`Date & Time` field, or one created specifically for this purpose." msgstr "" #: ../../content/applications/studio/fields.rst:198 msgid "To add a date range:" msgstr "" #: ../../content/applications/studio/fields.rst:200 msgid "Identify an existing :guilabel:`Date` or :guilabel:`Date & Time` field that can be used as the underlying start/end date field, or add a new one. If the date range:" msgstr "" #: ../../content/applications/studio/fields.rst:203 msgid "has a mandatory start date and end date, this field can be either the start date or end date; the outcome is the same." msgstr "" #: ../../content/applications/studio/fields.rst:205 msgid "allows an optional start or end date, this field is the start date or end date, respectively." msgstr "" #: ../../content/applications/studio/fields.rst:208 msgid "To avoid displaying the same information twice, the underlying start/end date field can be made invisible by enabling :guilabel:`Invisible` or removed from the view by clicking :guilabel:`Remove from view`." msgstr "" #: ../../content/applications/studio/fields.rst:212 msgid "Add a :guilabel:`Date & Time` field and set the :guilabel:`Widget` field to :guilabel:`Date Range`." msgstr "" #: ../../content/applications/studio/fields.rst:214 msgid "Enter an appropriate :guilabel:`Label`." msgstr "" #: ../../content/applications/studio/fields.rst:215 msgid "Select the underlying start/end date field from the :guilabel:`Start date field` or :guilabel:`End date field` dropdown, as relevant." msgstr "" #: ../../content/applications/studio/fields.rst:217 msgid "If the date range should have a mandatory start and end date, enable :guilabel:`Always range`." msgstr "" #: ../../content/applications/studio/fields.rst:218 msgid "Update any other :ref:`general properties ` or specific :ref:`properties for Date & Time fields ` as needed, then click :guilabel:`Close` in the upper right corner of the screen." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Date & Time fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:228 msgid "Remaining Days (`remaining_days`)" msgstr "" #: ../../content/applications/studio/fields.rst:230 msgid "The :guilabel:`Remaining Days` widget displays the remaining number of days before the selected date (e.g., *In 5 days*), based on the current date and time. This field should be set to :guilabel:`Read only`." msgstr "" #: ../../content/applications/studio/fields.rst:237 msgid "Checkbox (`boolean`)" msgstr "" #: ../../content/applications/studio/fields.rst:239 msgid "The :guilabel:`Checkbox` field is used when a value should only be true or false, indicated by checking or unchecking a checkbox." msgstr "" #: ../../content/applications/studio/fields.rst:242 msgid ":guilabel:`Button`: displays a radio button. The widget works without switching to the edit mode." msgstr "" #: ../../content/applications/studio/fields.rst:243 msgid ":guilabel:`Toggle`: displays a toggle button. The widget works without switching to the edit mode." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Checkbox fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:253 msgid "Selection (`selection`)" msgstr "" #: ../../content/applications/studio/fields.rst:255 msgid "The :guilabel:`Selection` field is used when users should select a single value from a group of predefined values." msgstr "" #: ../../content/applications/studio/fields.rst:260 msgid ":guilabel:`Badges`: displays all selectable values simultaneously inside rectangular shapes, organized horizontally." msgstr "" #: ../../content/applications/studio/fields.rst:262 msgid ":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." msgstr "" #: ../../content/applications/studio/fields.rst:266 #: ../../content/applications/studio/fields.rst:395 msgid ":guilabel:`Radio`: displays all selectable values at the same time as radio buttons." msgstr "" #: ../../content/applications/studio/fields.rst:269 msgid "By default, radio buttons are organized vertically. Enable :guilabel:`Display horizontally` to switch the way they are displayed." msgstr "" #: ../../content/applications/studio/fields.rst:272 msgid ":guilabel:`Status Bar`: displays all selectable values at the same time as an arrow progress bar." msgstr "" #: ../../content/applications/studio/fields.rst:275 msgid "By default, values on the status bar are selectable. Disable :guilabel:`Clickable` to prevent the value being edited on the UI." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of Selection fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:286 msgid "Priority (`selection`)" msgstr "" #: ../../content/applications/studio/fields.rst:288 msgid "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 `." msgstr "" #: ../../content/applications/studio/fields.rst:296 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Example of a Priority field" msgstr "" #: ../../content/applications/studio/fields.rst:308 msgid "File (`binary`)" msgstr "" #: ../../content/applications/studio/fields.rst:310 msgid "The :guilabel:`File` field is used to upload any type of file, or sign a form (:guilabel:`Sign` widget)." msgstr "" #: ../../content/applications/studio/fields.rst:313 msgid ":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 `." msgstr "" #: ../../content/applications/studio/fields.rst:316 msgid ":guilabel:`PDF Viewer`: users can upload a PDF file, which can be then browsed from the :ref:`Form view `." msgstr "" #: ../../content/applications/studio/fields.rst:318 msgid ":guilabel:`Sign`: users can electronically sign the form. This has the same effect as selecting the :ref:`Sign field `." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Examples of File fields with different widgets" msgstr "" #: ../../content/applications/studio/fields.rst:329 msgid "Image (`binary`)" msgstr "" #: ../../content/applications/studio/fields.rst:331 msgid "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 `." msgstr "" #: ../../content/applications/studio/fields.rst:338 msgid "To change the display size of uploaded images, select :guilabel:`Small`, :guilabel:`Medium`, or :guilabel:`Large` under the :guilabel:`Size` option." msgstr "" #: ../../content/applications/studio/fields.rst:344 msgid "Sign (`binary`)" msgstr "" #: ../../content/applications/studio/fields.rst:346 msgid "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 `." msgstr "" #: ../../content/applications/studio/fields.rst:352 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:361 msgid "Relational fields" msgstr "" #: ../../content/applications/studio/fields.rst:363 msgid "Relational fields are used to link and display the data from records on another model." msgstr "" #: ../../content/applications/studio/fields.rst:366 msgid "Non-default widgets, when available, are presented as bullet points below." msgstr "" #: ../../content/applications/studio/fields.rst:371 msgid "Many2One (`many2one`)" msgstr "" #: ../../content/applications/studio/fields.rst:373 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:377 msgid "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)." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Diagram showing a many2one relationship" msgstr "" #: ../../content/applications/studio/fields.rst:385 msgid "To prevent users from creating a new record in the linked model, tick :guilabel:`Disable creation`." msgstr "" #: ../../content/applications/studio/fields.rst:387 msgid "To prevent users from opening records in a pop-up window, tick :guilabel:`Disable opening`." msgstr "" #: ../../content/applications/studio/fields.rst:388 msgid "To help users only select the right record, click on :guilabel:`Domain` to create a filter." msgstr "" #: ../../content/applications/studio/fields.rst:389 msgid "To only trigger the search for a linked record after a minimum number of characters has been entered, enter the desired number in the :guilabel:`Typeahead search` field. In situations where the data set is large, this can enhance both search relevancy and performance." msgstr "" #: ../../content/applications/studio/fields.rst:393 msgid ":guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot be edited on the UI." msgstr "" #: ../../content/applications/studio/fields.rst:400 msgid "One2Many (`one2many`)" msgstr "" #: ../../content/applications/studio/fields.rst:402 msgid "The :guilabel:`One2Many` field is used to display the existing relations between a record on the current model and multiple records from another model." msgstr "" #: ../../content/applications/studio/fields.rst:406 msgid "You could add a :guilabel:`One2Many` field on the *Contact* model to look at **one** customer's **many** sales orders." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Diagram showing a one2many relationship" msgstr "" #: ../../content/applications/studio/fields.rst:413 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:420 msgid "Lines (`one2many`)" msgstr "" #: ../../content/applications/studio/fields.rst:422 msgid "The :guilabel:`Lines` field is used to create a table with rows and columns (e.g., the lines of products on a sales order)." msgstr "" #: ../../content/applications/studio/fields.rst:426 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Example of a Lines field" msgstr "" #: ../../content/applications/studio/fields.rst:438 msgid "Many2Many (`many2many`)" msgstr "" #: ../../content/applications/studio/fields.rst:440 msgid "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 `." msgstr "" #: ../../content/applications/studio/fields.rst:446 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Diagram showing many2many relationships" msgstr "" #: ../../content/applications/studio/fields.rst:454 msgid "To only trigger the search for the linked record after a minimum number of characters has been entered, enter the desired number in the :guilabel:`Typeahead search` field. In situations where the data set is large, this can enhance both search relevancy and performance." msgstr "" #: ../../content/applications/studio/fields.rst:458 msgid ":guilabel:`Checkboxes`: users can select several values using checkboxes." msgstr "" #: ../../content/applications/studio/fields.rst:459 msgid ":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 `." msgstr "" #: ../../content/applications/studio/fields.rst:466 msgid "Tags (`many2many`)" msgstr "" #: ../../content/applications/studio/fields.rst:468 msgid "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 `." msgstr "" #: ../../content/applications/studio/fields.rst:475 msgid "To display tags with different background colors, tick :guilabel:`Use colors`." msgstr "" #: ../../content/applications/studio/fields.rst:0 msgid "Example of a Tags field" msgstr "" #: ../../content/applications/studio/fields.rst:485 msgid "Related Field (`related`)" msgstr "" #: ../../content/applications/studio/fields.rst:487 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:491 msgid "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`." msgstr "" #: ../../content/applications/studio/fields.rst:497 msgid "Properties" msgstr "" #: ../../content/applications/studio/fields.rst:500 msgid "General properties" msgstr "" #: ../../content/applications/studio/fields.rst:502 msgid ":guilabel:`Invisible`: Enable this property when it is not necessary for users to view a field on the UI. This helps declutter the UI by only showing the essential fields depending on a specific situation." msgstr "" #: ../../content/applications/studio/fields.rst:506 msgid "The :guilabel:`Invisible` attribute also applies inside Studio. To view hidden fields in Studio, click on a view's :guilabel:`View` tab and enable :guilabel:`Show Invisible Elements`." msgstr "" #: ../../content/applications/studio/fields.rst:509 msgid ":guilabel:`Required`: Enable this property if a field should always be completed by the user before being able to proceed." msgstr "" #: ../../content/applications/studio/fields.rst:512 msgid ":guilabel:`Readonly`: Enable this property if users should not be able to modify a field." msgstr "" #: ../../content/applications/studio/fields.rst:515 msgid "You can choose to enable :guilabel:`Invisible`, :guilabel:`Required` and :guilabel:`Readonly` for specific records only by clicking on :guilabel:`Conditional` and creating a filter." msgstr "" #: ../../content/applications/studio/fields.rst:519 msgid "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." msgstr "" #: ../../content/applications/studio/fields.rst:523 msgid ":guilabel:`Label`: the field's name on the UI. This is not the name used in the PostgreSQL database. To view and change the latter, activate the :ref:`developer mode ` and edit the :guilabel:`Technical Name`." msgstr "" #: ../../content/applications/studio/fields.rst:527 msgid ":guilabel:`Help Tooltip`: To explain the purpose of a field, add a description. The text is displayed inside a tooltip box when hovering with your mouse over the question mark beside the field's label." msgstr "" #: ../../content/applications/studio/fields.rst:531 msgid ":guilabel:`Widget`: To change the default appearance or functionality of a field, select one of the available widgets." msgstr "" #: ../../content/applications/studio/fields.rst:534 msgid ":guilabel:`Placeholder`: To provide an example of how a field should be completed, add placeholder text. The text appears in light gray until a value is entered." msgstr "" #: ../../content/applications/studio/fields.rst:537 msgid ":guilabel:`Default value`: To display a default value in a field when a record is created, add a value." msgstr "" #: ../../content/applications/studio/fields.rst:540 msgid ":guilabel:`Allow visibility to groups`: To limit which users can view the field, select one or more user access :ref:`groups `." msgstr "" #: ../../content/applications/studio/fields.rst:542 msgid ":guilabel:`Forbid visibility to groups`: To prevent certain users from seeing the field, select one or more user access :ref:`groups `." msgstr "" #: ../../content/applications/studio/fields.rst:548 msgid "Properties for Date & Time fields" msgstr "" #: ../../content/applications/studio/fields.rst:550 msgid "For :guilabel:`Date & Time` fields that have the :guilabel:`Date & Time` or :guilabel:`Date Range` widget set, some specific properties are available:" msgstr "" #: ../../content/applications/studio/fields.rst:553 msgid ":guilabel:`Minimal precision`: Determine the smallest date unit that must be selected in the date selector. The possible values are :guilabel:`Day`, :guilabel:`Month`, :guilabel:`Year` or :guilabel:`Decade`. If no value is selected, the user must select a day in the date selector." msgstr "" #: ../../content/applications/studio/fields.rst:556 msgid ":guilabel:`Maximal precision`: Determine the largest date unit that can be used to navigate the date selector. The possible values are :guilabel:`Day`, :guilabel:`Month`, :guilabel:`Year` or :guilabel:`Decade`. If no value is selected, the user can navigate the date selector by decade." msgstr "" #: ../../content/applications/studio/fields.rst:559 msgid ":guilabel:`Warning for future dates`: Enable this property to display a warning icon if a future date is selected." msgstr "" #: ../../content/applications/studio/fields.rst:561 msgid ":guilabel:`Date format`: By default the date will be shown as `Apr 2, 2025, 08:05 AM`. Enable this property to show the date in the format `4/2/2025 08:05:00`. The numeric mode is the format set on the current language. In this mode the seconds are always shown." msgstr "" #: ../../content/applications/studio/fields.rst:565 msgid ":guilabel:`Show date`: This property is enabled by default for :guilabel:`Date & Time` fields. Disable this property to show only the time." msgstr "" #: ../../content/applications/studio/fields.rst:567 msgid ":guilabel:`Show time`: This property is enabled by default for :guilabel:`Date & Time` fields. On a read-only field, disable the property to show only the date. This can keep a list view less cluttered, for example." msgstr "" #: ../../content/applications/studio/fields.rst:570 msgid ":guilabel:`Show seconds`: This property is disabled by default for :guilabel:`Date & Time` fields. Enable the property to show the seconds." msgstr "" #: ../../content/applications/studio/fields.rst:572 msgid ":guilabel:`Time interval`: Enter a value to determine the minute intervals shown in the time selector. For example, enter 15 to allow quarter-hour intervals. The default value is set to 5 minutes." msgstr "" #: ../../content/applications/studio/fields.rst:575 msgid ":guilabel:`Earliest accepted date`: Enter the earliest date that can be selected in the date selector in ISO-format, i.e., `YYYY-MM-DD`. If the current date is always the earliest accepted date, enter `today`. On the date selector, dates prior to the earliest accepted date are grayed out." msgstr "" #: ../../content/applications/studio/fields.rst:579 msgid ":guilabel:`Latest accepted date`: Enter the latest date that can be selected in the date selector in ISO-format, i.e., `YYYY-MM-DD`. If the current date is always the latest accepted date, enter `today`. On the date selector, dates later than the latest accepted date are grayed out." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:3 msgid "Models, modules, and apps" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:5 msgid "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*." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:9 msgid "Modules and apps contain various elements, such as models, views, data files, web controllers, and static web data." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:13 msgid "All apps are modules. Larger, standalone modules are typically referred to as apps, whereas other modules usually serve as add-ons to said apps." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:19 msgid "Suggested features" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:21 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:28 msgid "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 `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:0 msgid "Combination of the Picture and Pipeline stages features on the Kanban view" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:39 msgid "Contact details" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:41 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:0 msgid "Contact details feature on the Form view" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:57 msgid "User assignment" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:59 msgid "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 `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:0 msgid "User assignment feature on the Form view" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:75 msgid "Date & Calendar" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:77 msgid "Selecting :guilabel:`Date & Calendar` adds to the :ref:`Form view ` a :ref:`Date field ` and activates the :ref:`Calendar view `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:84 msgid "Date range & Gantt" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:86 msgid "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 `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:94 msgid "Pipeline stages" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:96 msgid "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 `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:105 msgid "The :guilabel:`Pipeline stages` feature can be added at a later stage." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:110 msgid "Tags" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:112 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:120 msgid "Picture" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:122 msgid "Selecting :guilabel:`Picture` adds to the top-right of the :ref:`Form view ` an :ref:`Image field `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:126 msgid "The :guilabel:`Picture` feature can be added at a later stage." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:131 msgid "Lines" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:133 msgid "Selecting :guilabel:`Lines`: adds to the :ref:`Form view ` a :ref:`Lines field ` inside a :guilabel:`Tab` component." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:139 msgid "Notes" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:141 msgid "Selecting :guilabel:`Notes` adds to the :ref:`Form view ` an :ref:`Html field ` using the full width of the form." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:147 msgid "Monetary value" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:149 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:155 msgid "A *Currency* field is added and hidden from the view." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:160 msgid "Company" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:162 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:167 msgid "This is only useful if you work in a multi-company environment." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:172 msgid "Custom Sorting" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:174 msgid "Selecting :guilabel:`Custom Sorting` adds to the :ref:`List view ` a drag handle icon to manually reorder records." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:0 msgid "Custom Sorting feature on the List view" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:186 msgid "Chatter" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:188 msgid "Selecting :guilabel:`Chatter` adds to the :ref:`Form view ` Chatter functionalities (sending messages, logging notes, and scheduling activities)." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:192 msgid "The :guilabel:`Chatter` feature can be added at a later stage." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:0 msgid "Chatter feature on the Form view" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:203 msgid "Archiving" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:205 msgid "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." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:212 msgid "Export and import customizations" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:214 msgid "When you do any customization with Studio, a new module named `studio_customization` is added to your database. You can export this module as a ZIP file using the :guilabel:`Studio Export` function. The module can then be imported into another Odoo database. This may be useful, for example, when setting up a new module or for training purposes." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:220 msgid "Exporting and importing customizations in this way, rather than using the :doc:`standard Odoo export and import <../essentials/export_import_data>` functions, means data is imported in a logical way. For example, if the module contains customers and sales orders, the customers are created first, since these are required for the sales orders to be created." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:228 msgid "Export customizations" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:230 msgid "To export customizations, click the :icon:`oi-studio` :guilabel:`(Toggle Studio)` button on the main Odoo dashboard, then :guilabel:`Export`, then either:" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:233 msgid "download all Studio customizations by clicking the :guilabel:`Export` button; or" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:234 msgid "choose what data to export by clicking :ref:`Configure data and demo data to export `." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:240 msgid "Configure data to export" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:242 msgid "To select specific models to export, click :guilabel:`New` on the :guilabel:`Studio Export` screen, then start typing the name of the relevant model or select it from the list." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:246 msgid "Click :guilabel:`Preset` to see a list of all models in your database with records that have been modified using Studio and all custom models created using Studio. To configure one of these models for export, click on the model to open it and make the required changes." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:250 msgid "Tick the following options as relevant:" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:252 msgid ":guilabel:`Demo`: if the exported records should be considered as demo data when imported." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:253 msgid ":guilabel:`Attachments`: if attachments related to exported records should be included in the export." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:255 msgid ":guilabel:`Updatable`: if the exported records should be able to be updated during a module update." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:257 msgid "If necessary, edit the :guilabel:`Domain` to determine which of the model's records should be exported. To do so, click the :guilabel:`Edit Domain` button or :icon:`fa-caret-right` :guilabel:`(Modify filter)` then :guilabel:`Edit Domain`, as appropriate. Proceed to make any required changes." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:262 msgid "After configuring a model for export, click :guilabel:`Studio Export` to return to the main screen. To download a ZIP file with the customizations for all the listed models, click :guilabel:`Export`." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:266 msgid "It is not necessary to select one or more models as all listed models will be included in the export. To remove a model from the export, select it and click the :icon:`fa-cog` :guilabel:`Actions` button then :icon:`fa-trash-o` :guilabel:`Delete`." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:270 msgid "In the :guilabel:`Studio Export` window:" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:272 msgid "leave the checkboxes unticked to export only the customizations done with Studio." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:273 msgid "tick :guilabel:`Include Data` to include data from the selected models in the export." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:274 msgid "tick :guilabel:`Include Demo Data` to include data from the selected models that is flagged as demo data. Ticking this option also ticks :guilabel:`Include Data`." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:277 msgid "Click the :guilabel:`Export` button to download the ZIP file." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:-1 msgid "Choosing to export both data and demo data" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:285 msgid "Import customizations" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:288 msgid "Before importing, make sure the destination database is on the same Odoo version and contains the same apps and modules as the source database. Studio does not add the underlying modules as dependencies of the exported module." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:292 msgid "To import and install Studio customizations in another Odoo database:" msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:294 msgid "Connect to the destination database." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:295 msgid "Click the :icon:`oi-studio` :guilabel:`(Toggle Studio)` button on the main Odoo dashboard, then :guilabel:`Import`." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:297 msgid "Upload the exported ZIP file. If demo data should be imported, tick :guilabel:`Load demo data`." msgstr "" #: ../../content/applications/studio/models_modules_apps.rst:298 msgid "Click :guilabel:`Install`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:3 msgid "PDF reports" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:5 msgid "With Studio, you can :ref:`edit existing PDF reports ` (e.g., invoices, quotations, etc.) or :ref:`create new ones `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:11 msgid "Default layout" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:13 msgid "The default layout of reports is managed outside Studio. Go to :menuselection:`Settings`, then, in the :guilabel:`Companies` section of the main page, click :guilabel:`Configure Document Layout`. Layout settings are company-specific but apply to all reports." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:18 msgid "You can see how the different settings affect the report layout in the report preview on the right side of the :guilabel:`Configure your document layout` window. When creating or editing a report, you can see a preview of the report by clicking :guilabel:`Print preview` on the left side of the screen." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:23 msgid "Use the following settings:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:27 msgid ":guilabel:`Layout`: Seven layouts are available:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:31 msgid "Light" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Light report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:37 msgid "Boxed" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Boxed report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:43 msgid "Bold" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Bold report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:49 msgid "Striped" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Striped report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:55 msgid "Bubble" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Bubble report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:61 msgid "Wave" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Wave report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:67 msgid "Folder" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Folder report layout sample" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:75 msgid ":guilabel:`Background`: The following backgrounds are available:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:77 msgid ":guilabel:`Blank`: Nothing is displayed." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:78 msgid ":guilabel:`Demo logo`: A demo logo is displayed in the background." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:79 msgid ":guilabel:`Custom`: Upload a custom background image." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:83 msgid ":guilabel:`Text`: Eight fonts are available: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal (which supports Arabic and Latin scripts), and Fira Mono. Go to the `Google Fonts website `_ to preview them." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:89 msgid ":guilabel:`Company logo`: Click the :guilabel:`Edit` button to upload or change the logo. This adds the logo to the company’s record on the *Company* model, which you can access by going to :menuselection:`Settings` and then clicking :guilabel:`Update Info` in the :guilabel:`Companies` section." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:96 msgid ":guilabel:`Colors`: Change the primary and secondary colors used to structure reports. The default colors are automatically generated based on the colors of the logo." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:101 msgid ":guilabel:`Address`: The company name and address are displayed in the header of :ref:`external reports `. You can add multiple lines of text." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:106 msgid ":guilabel:`Tagline`: This is displayed in the header of :ref:`external reports ` using the Light, Striped, Bubble, Wave and Folder layouts and in the footer of external reports using the Boxed and Bold layouts. You can add multiple lines of text." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:113 msgid ":guilabel:`Footer`: This text is used in the footer of :ref:`external reports `. You can add multiple lines of text. You can also edit the footer using the :ref:`report editor `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:119 msgid ":guilabel:`Paper format`: This defines the default paper size of reports. You can select :guilabel:`A4` (21 cm x 29.7 cm) and :guilabel:`US Letter` (21.59 cm x 27.54 cm). This can also be defined for individual reports in the :guilabel:`Paper format` field in :ref:`Studio `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:125 msgid "Other paper formats may be available depending on which apps or modules you have installed, for example, label sheets for the Inventory app or event badges for the Events app." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:131 msgid "Creating new PDF reports" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:133 msgid "To create a new report for a :doc:`model `, (e.g., sales orders) access the model, click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) button, then click :guilabel:`Reports`. Click :guilabel:`New` and, in the popup window that opens, select the type of report. This is solely used to determine what is displayed in the header and footer:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:141 msgid ":guilabel:`External`:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:143 msgid "The header displays the company's :ref:`logo ` and its :ref:`name and address `. For reports using the Light, Striped, Bubble, Wave and Folder layouts, the :ref:`tagline ` also appears in the header." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:148 msgid "The footer displays the values set in the :ref:`Footer ` field and the page number. For reports using the Boxed and Bold layouts, the :ref:`tagline ` also appears in the footer." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:153 msgid ":guilabel:`Internal`: The header displays the user's current date and time, the company's :ref:`name and address ` and the page number. There is no footer." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:157 msgid ":guilabel:`Blank`: There is neither a header nor a footer. Click in the upper left corner of the page to edit the report." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:160 msgid "Once you have created the report, you can start :ref:`editing it `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:165 msgid "Editing PDF reports" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:167 msgid "To access the reports available for a model, access the model, click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) button, then click :guilabel:`Reports`. Select an existing report to open it." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:171 msgid "Alternatively, you can also open Studio, click :guilabel:`Reports`, and search for a specific report or model." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:175 msgid "It is strongly recommended to **duplicate** the standard report and make changes in the duplicated version. To duplicate a report, hover the mouse pointer on the top right corner of the report, click the :icon:`fa-ellipsis-vertical` (:guilabel:`vertical ellipsis`) icon, and then select :guilabel:`Duplicate`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Duplicating a PDF report" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:186 msgid "Options" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:188 msgid "Once you have selected or created a report, you can use the options in the left part of the screen to:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:191 msgid "Change the :guilabel:`Report name`: The new name is applied everywhere (in Studio, in the :guilabel:`Print` menu under the :icon:`fa-cog` (:guilabel:`gear`) icon in the form view, and in the PDF file name)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:194 msgid "Modify the :guilabel:`Paper format`: If no value is selected, the format defined in the :ref:`default layout ` is used." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:196 msgid ":guilabel:`Show in print menu`: to add the report to the :guilabel:`Print` menu in the form view." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:197 msgid ":guilabel:`Reload from attachment`: to save the report as an attachment on the record the first time it is generated and reload the original version of the report any subsequent time. This is legally required for invoices and is mainly used in this case." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:200 msgid ":guilabel:`Limit visibility to groups`: to limit the availability of the PDF report to specific :doc:`user groups <../general/users/access_rights>`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:202 msgid ":guilabel:`Edit sources`: to modify the report directly in the :ref:`XML file `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:204 msgid ":guilabel:`Reset report`: to discard all changes made to the report and reset it to its standard version." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:206 msgid ":guilabel:`Print preview`: to generate and download a report preview." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:211 msgid "Report editor" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:213 msgid "The report editor allows you to modify the content and formatting of the report." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:216 msgid "You can :guilabel:`Undo` or :guilabel:`Redo` changes using the related buttons or the shortcuts `CTRL` + `Z` and `CTRL` + `Y`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:219 msgid "Changes are saved automatically when you leave the report or manually using the :guilabel:`Save` button." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:222 msgid "You can reset the report to its standard version by clicking the :guilabel:`Reset report` button in the left part of the screen." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:226 msgid "Editing the header and footer of a report impacts all standard and custom reports." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:229 msgid "Conditional blocks" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:231 msgid "The dashed rectangles represent **conditional blocks** (*if/else* statements). These are used to show/hide content based on specific conditions. Click on the block to view the conditions." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:-1 msgid "View conditions applied to a block." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:237 msgid "Select a value to preview its corresponding output and edit it if necessary." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:-1 msgid "Preview the output of another condition." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:243 msgid "Conditions can only be edited in the :ref:`XML `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:246 msgid "Other content" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:248 msgid "There are two types of text content in reports:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:250 msgid "Static text, i.e., the text that is not highlighted in blue, which can be modified directly in the editor." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:252 msgid "Dynamic text, i.e., the text that is highlighted in blue, which is replaced by :doc:`field ` values when the report is generated, e.g., the sales order number or the quotation date." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:256 msgid "You can add content (e.g., fields, lists, tables, images, banners, etc.) to the report using commands. Type `/` to open the :ref:`powerbox `, then type the command's name or select it from the list." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:260 msgid "To add static text to the report, type the text where you want it." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:262 msgid "For more advanced changes, you can :ref:`edit the report in the XML directly `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:268 msgid "Add a field" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:270 msgid "To add a field, type `/` and select the :guilabel:`Field` command. In the list that opens, select or search for the field; click the right arrow next to the field name to access the list of related fields if needed. Then, specify the default value that will be shown if the field is not completed in the record and press `Enter`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:-1 msgid "Select a related field." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:281 msgid "Add or edit a table" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:283 msgid "There are two types of tables in reports:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:285 msgid ":ref:`Static tables `, which are used to display static text or fields. For this type of table, you define the number of columns and rows when adding the table." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:287 msgid ":ref:`Dynamic tables `, which are used to display data from :ref:`relational fields `. For this type of table, you only define the number of columns when adding the table. The number of rows in the generated report will be determined by the number of records in the related model that are linked with the current model." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:294 msgid "In a sales order report, a dynamic table is used to show the order lines related to the sales order. If the sales order contains 10 order lines, the table in the generated report has 10 rows; if it contains two order lines, the table has two rows." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:301 msgid "Add or edit a static table" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:303 msgid "To add a static table, type `/` and select the :guilabel:`Table` command. Determine the number of columns and rows for the table. Once the table has been added, you can start editing it." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:306 msgid "You can insert, move and delete columns and rows using the table tools. Position the cursor on top of the column or to the left of the row then click the purple rectangle and select an option." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:-1 msgid "List of available options for editing table structure." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:312 msgid "To resize a column, drag the column border to the desired position; reset all columns to their standard size by selecting :guilabel:`Reset Size` from the table tools." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:315 msgid "Add the :ref:`field of your choice ` in a cell or add static text by typing." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:319 msgid "To add text in a structured way without using a table, you can use columns. Add columns by typing `/` and selecting the appropriate command: :guilabel:`2 columns`, :guilabel:`3 columns` or :guilabel:`4 columns`." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:326 msgid "Add or edit a dynamic table" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:329 msgid "Only relations of type `one2many` or `many2many` can be displayed as dynamic tables." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:330 msgid "An existing dynamic table in a standard report has a more complex structure than a dynamic table you add yourself. For such tables, it is possible to insert or delete columns; it is not possible to move columns or to insert, move or delete rows." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:334 msgid "To add a dynamic table, type `/` and select the :guilabel:`Dynamic Table` command. In the list that opens, select or search for the relation the table will be based on and press `Enter`. Once the table has been added, you can start editing it." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:338 msgid "You can insert, move and delete columns using the table tools, as for a :ref:`static table `. It is also possible to insert static rows that will appear above or below the generated rows." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:342 msgid "To add a field to a cell, delete any placeholder text then add the :ref:`field of your choice `. The dialog box that opens shows the source object for the field (e.g., the *Order Lines* model) and the list of available fields." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:-1 msgid "List of available fields for the sale order lines model." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:349 msgid "Replace the :guilabel:`Column name` label by the label of your choice." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:352 msgid "The default row automatically iterates over the field's content, generating a row on the report for each field value (e.g., one row per order line)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:356 msgid "Formatting" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:358 msgid "To format text in the report, select it, then format it using the options in the :doc:`text editor `." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Format text using the text editor." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:367 msgid "Editing the report's XML" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:370 msgid "Modifying the XML directly may result in report issues during :doc:`upgrades <../../../administration/upgrade>`. If this happens, simply copy your changes from the old database into your upgraded database." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:374 msgid "To edit the report's XML, click :guilabel:`Edit sources` in the left pane." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:377 msgid "Examples" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:381 msgid "To change how data is presented in your report, you can modify a field's default :doc:`widget ` manually. In the example below, the order date shows the date and time by default, while the unit price defaults to a precision of two decimal places." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:394 msgid "By using `t-options`, in this case the `widget` option, these fields can be modified to show only the date and a precision of four decimal places, respectively:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:407 msgid "If you want to show/hide content based on specific conditions, you can manually add `if/else` control statements in the report XML." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:410 msgid "For example, if you want to hide a custom data table if there are no tags, you can use the `t-if` attribute to define the condition, which is then evaluated as `True` or `False`. The table will not be displayed if there are no tags in the quotation." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:439 msgid "If you want to display another block in case the `t-if` statement is evaluated as `False`, you can specify it using the `t-else` statement. The `t-else` block must directly follow the `t-if` block in the document structure. There is no need to specify any condition in the `t-else` attribute. As an example, let's show a quick message explaining that there are no tags on the quotation:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:471 msgid "By using the `t-if/t-else` notation, the report editor recognizes that these sections are mutually exclusive and should be displayed as conditional blocks:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Output preview if there are tags." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:477 msgid "You can switch conditions using the editor to preview their output:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Output preview if there are no tags." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:482 msgid "If you wish to have multiple options, you can also use `t-elif` directives to add intermediary conditions. For example, this is how the title of sales order reports changes based on the condition of the underlying document." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:495 msgid "The title *Pro-Forma Invoice* is used depending on some contextual conditions. If these conditions are not met and the state of the document is either `draft` or `sent`, then *Quotation* is used. If none of those conditions are met, the report's title is *Order*." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:501 msgid "Working with images in a report can be challenging, as precise control over image size and behavior is not always obvious. You can insert image fields using the report editor (by using the :ref:`Field command `), but inserting them in XML using the `t-field` directive and accompanying `t-options` attributes provides better sizing and positioning control." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:507 msgid "For example, the following code outputs the field `image_128` of the line's product as a 64px-wide image (with an automatic height based on the image's aspect ratio)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:514 msgid "The following options are available for image widgets:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:516 msgid "`width`: width of the image, usually in pixels or CSS length units (e.g., `rem`) (leave empty for auto-width)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:518 msgid "`height`: height of the image, usually in pixels or CSS length units (e.g., `rem`) (leave empty for auto-height)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:520 msgid "`class`: CSS classes applied on the `img` tag; `Bootstrap classes `_ are available." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:522 msgid "`alt`: alternative text of the image" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:523 msgid "`style`: style attribute; it allows you to override styles more freely than with `Bootstrap classes `_." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:526 msgid "These attributes must contain strings, i.e., text enclosed within quotes within quotes, e.g., `t-options-width=\"'64px'\"` (or, alternatively, a valid Python expression)." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:530 msgid "The image widget cannot be used on an `img` tag. Instead, set the `t-field` directive on a `span` (for inline content) or `div` (for block content) node." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:533 msgid "For example, let's add a column with the product image in the quotation table:" msgstr "" #: ../../content/applications/studio/pdf_reports.rst:561 msgid "The `t-options-width` attribute restricts the image width to 64 pixels, and the Bootstrap classes used in `t-options-class` create a thumbnail-like border with rounded corners and a shadow." msgstr "" #: ../../content/applications/studio/pdf_reports.rst:0 msgid "Add a column with the product image in the quotation table." msgstr "" #: ../../content/applications/studio/views.rst:3 msgid "Views" msgstr "" #: ../../content/applications/studio/views.rst:5 msgid "Views are the interface that allows displaying the data contained in a :doc:`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 `." msgstr "" #: ../../content/applications/studio/views.rst:12 msgid "To change the default view of a model, :ref:`access Studio `, go to :guilabel:`Views`, click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon next to the desired view, and click :guilabel:`Set as Default`." msgstr "" #: ../../content/applications/studio/views.rst:15 msgid "You can modify views using the built-in XML editor: Activate the :ref:`Developer mode `, go to the view you want to edit, select the :guilabel:`View` tab, and click :guilabel:` XML`." msgstr "" #: ../../content/applications/studio/views.rst:20 msgid "If you are editing a view using the XML editor, avoid making changes directly to standard and inherited views, as these would be reset and lost during updates or module upgrades. Always make sure you select the right Studio inherited views: When you modify a view in Studio by dragging and dropping a new field, for example, a specific Studio inherited view and its corresponding XPath, which defines the modified part of the view, are automatically generated." msgstr "" #: ../../content/applications/studio/views.rst:30 msgid "General views" msgstr "" #: ../../content/applications/studio/views.rst:33 #: ../../content/applications/studio/views.rst:115 #: ../../content/applications/studio/views.rst:223 #: ../../content/applications/studio/views.rst:338 msgid "The settings described below are found under the view's :guilabel:`View` tab unless specified otherwise." msgstr "" #: ../../content/applications/studio/views.rst:39 msgid "Form" msgstr "" #: ../../content/applications/studio/views.rst:41 msgid "The :guilabel:`Form` :icon:`fa-address-card` view is used when creating and editing records, such as contacts, sales orders, products, etc." msgstr "" #: ../../content/applications/studio/views.rst:44 msgid "To structure a form, drag and drop the :guilabel:`Tabs and Columns` element found under the :guilabel:`+ Add` tab." msgstr "" #: ../../content/applications/studio/views.rst:46 msgid "To prevent users from creating, editing, deleting or duplicating records, untick :guilabel:`Can Create`, :guilabel:`Can Edit`, :guilabel:`Can Delete` or :guilabel:`Can Duplicate`." msgstr "" #: ../../content/applications/studio/views.rst:48 msgid "To add a button, click :guilabel:`Add a button` at the top of the form, enter a :guilabel:`Label`, and select the button's action:" msgstr "" #: ../../content/applications/studio/views.rst:51 #: ../../content/applications/studio/views.rst:164 msgid ":guilabel:`Run a Server Action`: select the :ref:`server action ` to be executed from the dropdown list;" msgstr "" #: ../../content/applications/studio/views.rst:53 #: ../../content/applications/studio/views.rst:166 msgid ":guilabel:`Call a method`: specify an existing Python method already defined in Odoo." msgstr "" #: ../../content/applications/studio/views.rst:55 msgid "To change a button's label or style, click the button and edit its :guilabel:`Label` or :guilabel:`Class` (either `btn-primary` for a *primary* button or `btn-secondary` for a *secondary* button) in the :guilabel:`Properties` tab." msgstr "" #: ../../content/applications/studio/views.rst:60 msgid "*Primary* buttons represent the main action(s) the user can take in a specific view, e.g., :guilabel:`Send` a request for quotation, and are more visually prominent. *Secondary* buttons offer alternative or less common actions, e.g., :guilabel:`Print` or :guilabel:`Preview` a request for quotation, and are less visually prominent. By default, a new button is styled as a secondary button." msgstr "" #: ../../content/applications/studio/views.rst:66 msgid "To add a smart button, click the :icon:`fa-plus-square` (:guilabel:`plus`) icon in the top-right corner of the form. Enter a :guilabel:`Label`, choose an :guilabel:`Icon`, and select a :ref:`related field `." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Quotation Template model's Form view" msgstr "" #: ../../content/applications/studio/views.rst:78 msgid "Activity" msgstr "" #: ../../content/applications/studio/views.rst:80 msgid "The :guilabel:`Activity` :icon:`fa-clock-o` view is used to schedule and have an overview of activities (emails, calls, etc.) linked to records." msgstr "" #: ../../content/applications/studio/views.rst:84 msgid "This view can only be modified within Studio by editing the XML code." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Lead/Opportunity model's Activity view" msgstr "" #: ../../content/applications/studio/views.rst:94 msgid "Search" msgstr "" #: ../../content/applications/studio/views.rst:96 msgid "The :guilabel:`Search` :icon:`oi-search` view is added on top of other views to filter, group, and search records." msgstr "" #: ../../content/applications/studio/views.rst:99 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:101 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Project model's Search view on the Kanban view" msgstr "" #: ../../content/applications/studio/views.rst:112 msgid "Multiple records views" msgstr "" #: ../../content/applications/studio/views.rst:121 msgid "Kanban" msgstr "" #: ../../content/applications/studio/views.rst:123 msgid "The :guilabel:`Kanban` :icon:`oi-view-kanban` view is often used to support business flows by moving records across stages or as an alternative way to display records inside *cards*." msgstr "" #: ../../content/applications/studio/views.rst:127 msgid "If the :guilabel:`Kanban` view exists, it is used by default to display data on mobile devices instead of the :ref:`List view `." msgstr "" #: ../../content/applications/studio/views.rst:130 msgid "To prevent users from creating new records, untick :guilabel:`Can Create`." msgstr "" #: ../../content/applications/studio/views.rst:131 msgid "To create records directly within the view, in a minimalistic form, enable :guilabel:`Quick Create`." msgstr "" #: ../../content/applications/studio/views.rst:133 #: ../../content/applications/studio/views.rst:160 msgid "To set a default grouping for records, select a field under :guilabel:`Default Group By`." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Project model's Kanban view" msgstr "" #: ../../content/applications/studio/views.rst:143 msgid "List" msgstr "" #: ../../content/applications/studio/views.rst:145 msgid "The :guilabel:`List` :icon:`oi-view-list` view is used to overview many records at once, look for records, and edit simple records." msgstr "" #: ../../content/applications/studio/views.rst:148 msgid "To prevent users from creating, editing, deleting or duplicating records, untick :guilabel:`Can Create`, :guilabel:`Can Edit`, :guilabel:`Can Delete`, or :guilabel:`Can Duplicate`." msgstr "" #: ../../content/applications/studio/views.rst:150 msgid "To create and edit records directly within the view, select either :guilabel:`Add record at the bottom`, :guilabel:`Add record on top` or :guilabel:`Open form view` under :guilabel:`When Creating Record`." msgstr "" #: ../../content/applications/studio/views.rst:155 msgid "This prevents users from opening records in :ref:`Form view ` from the :guilabel:`List` view." msgstr "" #: ../../content/applications/studio/views.rst:158 msgid "To edit several records at once, tick :guilabel:`Enable Mass Editing`." msgstr "" #: ../../content/applications/studio/views.rst:159 msgid "To change the way records are sorted by default, select a field under :guilabel:`Sort By`." msgstr "" #: ../../content/applications/studio/views.rst:161 msgid "To add a button, click :guilabel:`Add a button` at the top of the list, enter a :guilabel:`Label`, and select the button's action:" msgstr "" #: ../../content/applications/studio/views.rst:168 msgid "The widths of columns in a :guilabel:`List` :icon:`oi-view-list` view are computed automatically to provide the optimal user experience. However, it is also possible to set a fixed column width per field. To do so, click on the relevant column to open the field's :icon:`fa-server` :guilabel:`Properties` tab, then enter the desired number of pixels in the :guilabel:`Column Width (px)` field." msgstr "" #: ../../content/applications/studio/views.rst:175 msgid "To add a :icon:`oi-draggable` (:guilabel:`drag handle`) icon to reorder records manually, add an :ref:`Integer field ` with the :guilabel:`Handle` widget." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Drag handle icon enabling to sort records manually in List view" msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Sales order model's List view" msgstr "" #: ../../content/applications/studio/views.rst:190 msgid "Map" msgstr "" #: ../../content/applications/studio/views.rst:192 msgid "The :guilabel:`Map` :icon:`fa-map-marker` 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." msgstr "" #: ../../content/applications/studio/views.rst:196 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:199 msgid "To select which kind of contact should be used on the map, select it under :guilabel:`Contact Field`." msgstr "" #: ../../content/applications/studio/views.rst:201 msgid "To hide the name or the address of the record, tick :guilabel:`Hide Name` or :guilabel:`Hide Address`." msgstr "" #: ../../content/applications/studio/views.rst:203 msgid "To add information from other fields, select them under :guilabel:`Additional Fields`." msgstr "" #: ../../content/applications/studio/views.rst:204 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Task model's Map view" msgstr "" #: ../../content/applications/studio/views.rst:215 msgid "Timeline views" msgstr "" #: ../../content/applications/studio/views.rst:218 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:229 msgid "Calendar" msgstr "" #: ../../content/applications/studio/views.rst:231 msgid "The :guilabel:`Calendar` :icon:`fa-calendar` view is used to overview and manage records inside a calendar." msgstr "" #: ../../content/applications/studio/views.rst:234 msgid "To create records directly within the view instead of opening the :ref:`Form view `, enable :guilabel:`Quick Create`." msgstr "" #: ../../content/applications/studio/views.rst:238 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:242 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:246 msgid "As the number of colors is limited, the same color can end up being assigned to different values." msgstr "" #: ../../content/applications/studio/views.rst:249 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:252 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:256 msgid "You can also use a :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." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Calendar Event model's Calendar view" msgstr "" #: ../../content/applications/studio/views.rst:270 msgid "Cohort" msgstr "" #: ../../content/applications/studio/views.rst:272 msgid "The :guilabel:`Cohort` :icon:`oi-view-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." msgstr "" #: ../../content/applications/studio/views.rst:276 msgid "To display a measure (i.e., the aggregated value of a given field) by default on the view, select a :guilabel:`Measure Field`." msgstr "" #: ../../content/applications/studio/views.rst:278 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:280 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:284 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Subscription model's Cohort view" msgstr "" #: ../../content/applications/studio/views.rst:296 msgid "Gantt" msgstr "" #: ../../content/applications/studio/views.rst:298 msgid "The :guilabel:`Gantt` :icon:`fa-tasks` view is used to forecast and examine the overall progress of records. Records are represented by a bar under a time scale." msgstr "" #: ../../content/applications/studio/views.rst:301 msgid "To prevent users from creating or editing records, untick :guilabel:`Can Create` or :guilabel:`Can Edit`." msgstr "" #: ../../content/applications/studio/views.rst:303 msgid "To fill cells in gray whenever a record should not be created there (e.g., on weekends for employees), tick :guilabel:`Display Unavailability`." msgstr "" #: ../../content/applications/studio/views.rst:307 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:310 msgid "To show a total row at the bottom, tick :guilabel:`Display Total row`." msgstr "" #: ../../content/applications/studio/views.rst:311 msgid "To collapse multiple records in a single row, tick :guilabel:`Collapse First Level`." msgstr "" #: ../../content/applications/studio/views.rst:312 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:314 msgid "To define a default time scale to view records, select :guilabel:`Day`, :guilabel:`Week`, :guilabel:`Month`, or :guilabel:`Year` under :guilabel:`Default Scale`." msgstr "" #: ../../content/applications/studio/views.rst:316 msgid "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." msgstr "" #: ../../content/applications/studio/views.rst:320 msgid "As the number of colors is limited, the same color can be assigned to different values." msgstr "" #: ../../content/applications/studio/views.rst:322 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Planning Shift model's Gantt view" msgstr "" #: ../../content/applications/studio/views.rst:335 msgid "Reporting views" msgstr "" #: ../../content/applications/studio/views.rst:344 msgid "Pivot" msgstr "" #: ../../content/applications/studio/views.rst:346 msgid "The :guilabel:`Pivot` :icon:`oi-view-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." msgstr "" #: ../../content/applications/studio/views.rst:350 msgid "To access all records whose data is aggregated under a cell, tick :guilabel:`Access records from cell`." msgstr "" #: ../../content/applications/studio/views.rst:352 msgid "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`." msgstr "" #: ../../content/applications/studio/views.rst:354 msgid "To add different types of data to be measured using the view, select a field under :guilabel:`Measures`." msgstr "" #: ../../content/applications/studio/views.rst:356 msgid "To display a count of records that made up the aggregated data in a cell, tick :guilabel:`Display count`." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Purchase Report model's Pivot view" msgstr "" #: ../../content/applications/studio/views.rst:367 msgid "Graph" msgstr "" #: ../../content/applications/studio/views.rst:369 msgid "The :guilabel:`Graph` :icon:`fa-area-chart` view is used to showcase data from records in a bar, line, or pie chart." msgstr "" #: ../../content/applications/studio/views.rst:372 msgid "To change the default chart, select :guilabel:`Bar`, :guilabel:`Line`, or :guilabel:`Pie` under :guilabel:`Type`." msgstr "" #: ../../content/applications/studio/views.rst:374 msgid "To choose a default data dimension (category), select a field under :guilabel:`First dimension` and, if needed, another under :guilabel:`Second dimension`." msgstr "" #: ../../content/applications/studio/views.rst:376 msgid "To select a default type of data to be measured using the view, select a field under :guilabel:`Measure`." msgstr "" #: ../../content/applications/studio/views.rst:378 msgid "*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`." msgstr "" #: ../../content/applications/studio/views.rst:381 msgid "*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`." msgstr "" #: ../../content/applications/studio/views.rst:383 msgid "*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`." msgstr "" #: ../../content/applications/studio/views.rst:0 msgid "Sales Analysis Report model's Bar chart on Graph view" msgstr ""