[MOV] documentation structure reorganization
This commit aims to improve the documentation's navigability by redefining some categories' purposes and titles. There is a redirection rule for each documentation page moved. This ensures that users won't have a 404 error message. task-3217827 closes odoo/documentation#8061 Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
@@ -0,0 +1,239 @@
|
||||
==========
|
||||
Activities
|
||||
==========
|
||||
|
||||
*Activities* are follow-up tasks tied to a record in an Odoo database. Activities can be scheduled
|
||||
on any page of the database that contains a chatter thread, kanban view, list view, or activities
|
||||
view of an application.
|
||||
|
||||
Schedule activities
|
||||
===================
|
||||
|
||||
One way that activities are created is by clicking the :guilabel:`Schedule Activity` button, located
|
||||
at the top of the *chatter* on any record. On the pop-up window that appears, select an
|
||||
:guilabel:`Activity Type` from the drop-down menu.
|
||||
|
||||
.. tip::
|
||||
Individual applications have a list of *Activity Types* dedicated to that application. For
|
||||
example, to view and edit the activities available for the *CRM* application, go to
|
||||
:menuselection:`CRM app --> Configuration --> Activity Types`.
|
||||
|
||||
Enter a title for the activity in the :guilabel:`Summary` field, located in the :guilabel:`Schedule
|
||||
Activity` pop-up window.
|
||||
|
||||
To assign the activity to a different user, select a name from the :guilabel:`Assigned to` drop-down
|
||||
menu. Otherwise, the user creating the activity is automatically assigned.
|
||||
|
||||
Lastly, feel free to add any additional information in the optional :guilabel:`Log a note...` field.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Due Date` field on the :guilabel:`Schedule Activity` pop-up window auto-populates
|
||||
based on the configuration settings for the selected :guilabel:`Activity Type`. However, this
|
||||
date can be changed by selecting a day on the calendar in the :guilabel:`Due Date` field.
|
||||
|
||||
Lastly, click one of the following buttons:
|
||||
|
||||
- :guilabel:`Schedule`: adds the activity to the chatter under :guilabel:`Planned activities`.
|
||||
- :guilabel:`Mark as Done`: adds the details of the activity to the chatter under :guilabel:`Today`.
|
||||
The activity is not scheduled, it is automatically marked as completed.
|
||||
- :guilabel:`Done \& Schedule Next`: adds the task under :guilabel:`Today` marked as done, and
|
||||
opens a new activity window.
|
||||
- :guilabel:`Discard`: discards any changes made on the pop-up window.
|
||||
|
||||
.. image:: activities/schedule-pop-up.png
|
||||
:alt: View of CRM leads and the option to schedule an activity.
|
||||
|
||||
.. note::
|
||||
Depending on the activity type, the :guilabel:`Schedule` button may be replaced by a
|
||||
:guilabel:`Save` button, or an :guilabel:`Open Calendar` button.
|
||||
|
||||
Scheduled activities are added to the chatter for the record under :guilabel:`Planned activities`.
|
||||
|
||||
.. image:: activities/chatter-activities.png
|
||||
:alt: View of CRM leads and the option to schedule an activity.
|
||||
|
||||
Activities can also be scheduled from the kanban, list, or activities view of an application.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Kanban view
|
||||
|
||||
Select a record on which to schedule an activity. Click on the :guilabel:`🕘 (clock)` icon,
|
||||
then :guilabel:`Schedule An Activity`, and proceed to fill out the pop-up form.
|
||||
|
||||
.. image:: activities/schedule-kanban-activity.png
|
||||
:alt: Kanban view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. tab:: List view
|
||||
|
||||
Select a record on which to schedule an activity. Click on the :guilabel:`🕘 (clock)` icon,
|
||||
then :guilabel:`Schedule An Activity`. If the record already has an activity scheduled, the
|
||||
clock icon may be replaced by a :guilabel:`📞 (phone)` or an :guilabel:`✉️ (envelope)` icon.
|
||||
|
||||
.. image:: activities/schedule-list-activity.png
|
||||
:alt: List view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. tab:: Activity view
|
||||
|
||||
To open the activity view for an application, select the :guilabel:`🕘 (clock)` icon from the
|
||||
menu bar anywhere in the database. Select any application from the drop-down menu, and click
|
||||
the :guilabel:`🕘 (clock)` icon for the desired app.
|
||||
|
||||
.. image:: activities/schedule-activity-view-menu.png
|
||||
:alt: Activity menu drop down with focus on where to open activity view for CRM.
|
||||
|
||||
Select a record on which to schedule an activity. Move across the row to find the desired
|
||||
activity type, then click the :guilabel:`+ (plus sign)`.
|
||||
|
||||
.. image:: activities/schedule-activity-view.png
|
||||
:alt: Activity view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. note::
|
||||
Activity colors, and their relation to an activity's due date, is consistent throughout Odoo,
|
||||
regardless of the activity type, or the view.
|
||||
|
||||
- Activities that appear in **green** indicate a due date sometime in the future.
|
||||
- **Yellow** indicates that the activity's due date is today.
|
||||
- **Red** indicates that the activity is overdue and the due date has passed.
|
||||
|
||||
For example, if an activity is created for a phone call, and the due date passes, the activity
|
||||
appears with a red phone in list view, and a red clock on the kanban view.
|
||||
|
||||
View scheduled activities
|
||||
=========================
|
||||
|
||||
To view scheduled activities, open either the :menuselection:`Sales app` or :menuselection:`CRM app`
|
||||
and click the :guilabel:`🕘 (clock)` icon, located to the far-right side of the other view options.
|
||||
|
||||
Doing so opens the activities menu, showcasing all the scheduled activities for the user, by
|
||||
default. To show all activities for every user, remove the :guilabel:`My Pipeline` filter from the
|
||||
:guilabel:`Search...` bar.
|
||||
|
||||
To view a consolidated list of activities separated by the application where they were created, and
|
||||
by deadline, click the :guilabel:`🕘 (clock)` icon on the header menu to see the activities for that
|
||||
specific application in a drop-down menu.
|
||||
|
||||
The possibility to :guilabel:`Add new note` and :guilabel:`Request a Document` appear at the bottom
|
||||
of this drop-down menu, when the :guilabel:`🕘 (clock)` icon on the header menu is clicked.
|
||||
|
||||
.. image:: activities/activities-menu.png
|
||||
:alt: View of CRM leads page emphasizing the activities menu.
|
||||
|
||||
Configure activity types
|
||||
========================
|
||||
|
||||
To configure the types of activities in the database, go to :menuselection:`Settings app --> Discuss
|
||||
--> Activities --> Activity Types`.
|
||||
|
||||
.. image:: activities/settings-activities-types.png
|
||||
:alt: View of the settings page emphasizing the menu activity types.
|
||||
|
||||
Doing so reveals the :guilabel:`Activity Types` page, where the existing activity types are found.
|
||||
|
||||
To edit an existing activity type, select it from the list, then click :guilabel:`Edit`. To create a
|
||||
new activity type, click :guilabel:`Create`.
|
||||
|
||||
At the top of a blank activity type form, start by choosing a :guilabel:`Name` for the new activity
|
||||
type.
|
||||
|
||||
.. image:: activities/new-activity-type.png
|
||||
:alt: New activity type form.
|
||||
|
||||
Activity settings
|
||||
-----------------
|
||||
|
||||
Action
|
||||
~~~~~~
|
||||
|
||||
The *Action* field specifies the intent of the activity. Some actions trigger specific behaviors
|
||||
after an activity is scheduled.
|
||||
|
||||
- If :guilabel:`Upload Document` is selected, a link to upload a document is added directly to the
|
||||
planned activity in the chatter.
|
||||
- If either :guilabel:`Phonecall` or :guilabel:`Meeting` are selected, users have the option to open
|
||||
their calendar to schedule a time for this activity.
|
||||
- If :guilabel:`Request Signature` is selected, a link is added to the planned activity in the
|
||||
chatter that opens a signature request pop-up window.
|
||||
|
||||
.. note::
|
||||
The actions available to select on an activity type vary, depending on the applications currently
|
||||
installed in the database.
|
||||
|
||||
Default user
|
||||
~~~~~~~~~~~~
|
||||
|
||||
To automatically assign this activity to a specific user when this activity type is scheduled,
|
||||
choose a name from the :guilabel:`Default User` drop-down menu. If this field is left blank, the
|
||||
activity is assigned to the user who creates the activity.
|
||||
|
||||
Default summary
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
To include notes whenever this activity type is created, enter them into the :guilabel:`Default
|
||||
Summary` field.
|
||||
|
||||
.. note::
|
||||
The information in the :guilabel:`Default User` and :guilabel:`Default Summary` fields are
|
||||
included when an activity is created. However, they can be altered before the activity is
|
||||
scheduled or saved.
|
||||
|
||||
Next activity
|
||||
-------------
|
||||
|
||||
To automatically suggest, or trigger, a new activity after an activity has been marked complete, the
|
||||
:guilabel:`Chaining Type` must be set.
|
||||
|
||||
Suggest next activity
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the :guilabel:`Chaining Type` field, select :guilabel:`Suggest Next Activity`. Upon doing so, the
|
||||
field underneath changes to: :guilabel:`Suggest`. Click the :guilabel:`Suggest` field drop-down menu
|
||||
to select any activities to recommend as follow-up tasks to this activity type.
|
||||
|
||||
In the :guilabel:`Schedule` field, choose a default deadline for these activities. To do so,
|
||||
configure a desired number of :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`. Then,
|
||||
decide if it should occur :guilabel:`after completion date` or :guilabel:`after previous activity
|
||||
deadline`.
|
||||
|
||||
This :guilabel:`Schedule` field information can be altered before the activity is scheduled.
|
||||
|
||||
When all configurations are complete, click :guilabel:`Save`.
|
||||
|
||||
.. image:: activities/schedule-recommended-activity.png
|
||||
:alt: Schedule activity popup with emphasis on recommended activities.
|
||||
|
||||
.. note::
|
||||
If an activity has the :guilabel:`Chaining Type` set to :guilabel:`Suggest Next Activity`, and
|
||||
has activities listed in the :guilabel:`Suggest` field, users are presented with recommendations
|
||||
for activities as next steps.
|
||||
|
||||
Trigger next activity
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Setting the :guilabel:`Chaining Type` to :guilabel:`Trigger Next Activity` immediately launches the
|
||||
next activity once the previous one is completed.
|
||||
|
||||
If :guilabel:`Trigger Next Activity` is selected in the :guilabel:`Chaining Type` field, the field
|
||||
beneath changes to: :guilabel:`Trigger`. From the :guilabel:`Trigger` field drop-down menu, select
|
||||
the activity that should be launched once this activity is completed.
|
||||
|
||||
In the :guilabel:`Schedule` field, choose a default deadline for these activities. To do so,
|
||||
configure a desired number of :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`. Then,
|
||||
decide if it should occur :guilabel:`after completion date` or :guilabel:`after previous activity
|
||||
deadline`.
|
||||
|
||||
This :guilabel:`Schedule` field information can be altered before the activity is scheduled.
|
||||
|
||||
When all configurations are complete, click :guilabel:`Save`.
|
||||
|
||||
.. image:: activities/triggered-activities.png
|
||||
:alt: Schedule new activity popup with emphasis on Done and launch next button.
|
||||
|
||||
.. note::
|
||||
When an activity has the :guilabel:`Chaining Type` set to :guilabel:`Trigger Next Activity`,
|
||||
marking the activity as `Done` immediately launches the next activity listed in the
|
||||
:guilabel:`Trigger` field.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`/applications/productivity/discuss`
|
||||
- :doc:`/applications/productivity/discuss/team_communication`
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,411 @@
|
||||
======================
|
||||
Export and import data
|
||||
======================
|
||||
|
||||
.. _export-data:
|
||||
|
||||
Export data from Odoo
|
||||
=====================
|
||||
|
||||
When working with a database, it sometimes is necessary to export your data in a distinct file.
|
||||
Doing so can help to do reporting over your activities (even if Odoo offers a precise and easy
|
||||
reporting tool with each available application).
|
||||
|
||||
With Odoo, you can export the values from any field in any record. To do so,
|
||||
activate the list view on the items that need to be exported, click on *Action*, and, then,
|
||||
on *Export*.
|
||||
|
||||
.. image:: export_import_data/list-view-export.png
|
||||
:align: center
|
||||
:alt: view of the different things to enable/click to export data
|
||||
|
||||
Pretty simple, this action still comes with some specificities. In fact,
|
||||
when clicking on *Export*, a pop-up window appears with several
|
||||
options for the data to export:
|
||||
|
||||
.. image:: export_import_data/export-data-overview.png
|
||||
:align: center
|
||||
:alt: overview of all the options to take into account when exporting data in Odoo
|
||||
|
||||
#. With the *I want to update data* option ticked, the system only
|
||||
shows the fields which can be imported. This is very helpful in
|
||||
case you want to update existing records. Basically, this works
|
||||
like a filter. Leaving the box unticked gives way more field
|
||||
options because it shows all the fields, not just the ones which
|
||||
can be imported.
|
||||
#. When exporting, you can choose between two formats: .csv and .xls.
|
||||
With .csv, items are separated with a comma, while .xls holds information about all the
|
||||
worksheets in a file, including both content and formatting.
|
||||
#. Those are the items you may want to export. Use the arrows to display
|
||||
more sub-field options. Of course, you can use the search bar to
|
||||
find specific fields more easily. To use the search option more
|
||||
efficiently, display all the fields by clicking on all the
|
||||
arrows!
|
||||
#. The + button is there to add fields to the "to export" list.
|
||||
#. The "handles" next to the selected fields allow you to move the fields up and down to
|
||||
change the order in which they must be displayed in the exported
|
||||
file.
|
||||
#. The trashcan is there if you need to remove fields.
|
||||
#. For recurring reports, it might be interesting to save export presets.
|
||||
Select all the needed ones and click on the template bar.
|
||||
There, click on *New template* and give a name to yours. The
|
||||
next time you need to export the same list, simply select the
|
||||
related template.
|
||||
|
||||
.. tip::
|
||||
It’s good to keep the field’s external identifier in mind. For example,
|
||||
*Related Company* is equal to *parent_id*. Doing so helps export
|
||||
only what you would like to import next.
|
||||
|
||||
.. _import-data:
|
||||
|
||||
Import data into Odoo
|
||||
=====================
|
||||
|
||||
How to start
|
||||
------------
|
||||
|
||||
You can import data on any Odoo's business object using either Excel
|
||||
(.xlsx) or CSV (.csv) formats:
|
||||
contacts, products, bank statements, journal entries and even orders!
|
||||
|
||||
Open the view of the object you want to populate and click on :menuselection:`Favorites --> Import
|
||||
records`.
|
||||
|
||||
.. image:: export_import_data/import_button.png
|
||||
:align: center
|
||||
|
||||
There you are provided with templates you can easily populate
|
||||
with your own data. Such templates can be imported in one click;
|
||||
The data mapping is already done.
|
||||
|
||||
How to adapt the template
|
||||
-------------------------
|
||||
|
||||
* Add, remove and sort columns to fit at best your data structure.
|
||||
* We advise to not remove the **ID** one (see why in the next section).
|
||||
* Set a unique ID to every single record by dragging down the ID sequencing.
|
||||
|
||||
.. image:: export_import_data/dragdown.gif
|
||||
:align: center
|
||||
|
||||
* When you add a new column, Odoo might not be able to map it automatically if its
|
||||
label doesn't fit any field in Odoo. Don't worry! You can map
|
||||
new columns manually when you test the import. Search the list for the
|
||||
corresponding field.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
|
||||
Then, use this field's label in your file in order to make it work
|
||||
straight on the very next time.
|
||||
|
||||
How to import from another application
|
||||
--------------------------------------
|
||||
|
||||
In order to re-create relationships between different records,
|
||||
you should use the unique identifier from the original application
|
||||
and map it to the **ID** (External ID) column in Odoo.
|
||||
When you import another record that links to the first one,
|
||||
use **XXX/ID** (XXX/External ID) to the original unique identifier.
|
||||
You can also find this record using its name but you will be stuck
|
||||
if at least 2 records have the same name.
|
||||
|
||||
The **ID** will also be used to update the original import
|
||||
if you need to re-import modified data later,
|
||||
it's thus good practice to specify it whenever possible.
|
||||
|
||||
|
||||
I cannot find the field I want to map my column to
|
||||
--------------------------------------------------
|
||||
|
||||
Odoo tries to find with some heuristic, based on the first ten lines of
|
||||
the files, the type of field for each column inside your file.
|
||||
For example if you have a column only containing numbers,
|
||||
only the fields that are of type *Integer* will be displayed for you
|
||||
to choose from.
|
||||
While this behavior might be good and easy for most cases,
|
||||
it is also possible that it goes wrong or that you want to
|
||||
map your column to a field that is not proposed by default.
|
||||
|
||||
If that happens, you just have to check the
|
||||
** Show fields of relation fields (advanced)** option,
|
||||
you will then be able to choose from the complete list of fields for each column.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
|
||||
Where can I change the date import format?
|
||||
------------------------------------------
|
||||
|
||||
Odoo can automatically detect if a column is a date, and it will try to guess the date format from a
|
||||
set of most commonly used date formats. While this process can work for many date formats, some date
|
||||
formats will not be recognized. This can cause confusion due to day-month inversions; it is
|
||||
difficult to guess which part of a date format is the day and which part is the month in a date such
|
||||
as '01-03-2016'.
|
||||
|
||||
To view which date format Odoo has found from your file you can check the **Date Format** that is
|
||||
shown when clicking on **Options** under the file selector. If this format is incorrect you can
|
||||
change it to your liking using the *ISO 8601* to define the format.
|
||||
|
||||
.. note::
|
||||
If you are importing an excel (.xls, .xlsx) file, you can use date cells to store dates as the
|
||||
display of dates in excel is different from the way it is stored. That way you will be sure that
|
||||
the date format is correct in Odoo whatever your locale date format is.
|
||||
|
||||
Can I import numbers with currency sign (e.g.: $32.00)?
|
||||
-------------------------------------------------------
|
||||
|
||||
Yes, we fully support numbers with parenthesis to represent negative sign as well as numbers with
|
||||
currency sign attached to them. Odoo also automatically detect which thousand/decimal separator you
|
||||
use (you can change those under **options**). If you use a currency symbol that is not known to
|
||||
Odoo, it might not be recognized as a number though and it will crash.
|
||||
|
||||
Examples of supported numbers (using thirty-two thousands as an example):
|
||||
|
||||
- 32.000,00
|
||||
- 32000,00
|
||||
- 32,000.00
|
||||
- -32000.00
|
||||
- (32000.00)
|
||||
- $ 32.000,00
|
||||
- (32000.00 €)
|
||||
|
||||
Example that will not work:
|
||||
|
||||
- ABC 32.000,00
|
||||
- $ (32.000,00)
|
||||
|
||||
What can I do when the Import preview table isn't displayed correctly?
|
||||
----------------------------------------------------------------------
|
||||
|
||||
By default the Import preview is set on commas as field separators and quotation marks as text
|
||||
delimiters. If your csv file does not have these settings, you can modify the File Format Options
|
||||
(displayed under the Browse CSV file bar after you select your file).
|
||||
|
||||
Note that if your CSV file has a tabulation as separator, Odoo will not detect the separations. You
|
||||
will need to change the file format options in your spreadsheet application. See the following
|
||||
question.
|
||||
|
||||
How can I change the CSV file format options when saving in my spreadsheet application?
|
||||
---------------------------------------------------------------------------------------
|
||||
|
||||
If you edit and save CSV files in spreadsheet applications, your computer's regional settings will
|
||||
be applied for the separator and delimiter. We suggest you use OpenOffice or LibreOffice Calc as
|
||||
they will allow you to modify all three options (in :menuselection:`'Save As' dialog box --> Check the
|
||||
box 'Edit filter settings' --> Save`).
|
||||
|
||||
Microsoft Excel will allow you to modify only the encoding when saving (in :menuselection:`'Save As'
|
||||
dialog box --> click 'Tools' dropdown list --> Encoding tab`).
|
||||
|
||||
What's the difference between Database ID and External ID?
|
||||
----------------------------------------------------------
|
||||
|
||||
Some fields define a relationship with another object. For example, the country of a contact is a
|
||||
link to a record of the 'Country' object. When you want to import such fields, Odoo will have to
|
||||
recreate links between the different records. To help you import such fields, Odoo provides three
|
||||
mechanisms. You must use one and only one mechanism per field you want to import.
|
||||
|
||||
For example, to reference the country of a contact, Odoo proposes you 3 different fields to import:
|
||||
|
||||
- Country: the name or code of the country
|
||||
- Country/Database ID: the unique Odoo ID for a record, defined by the ID postgresql column
|
||||
- Country/External ID: the ID of this record referenced in another application (or the .XML file
|
||||
that imported it)
|
||||
|
||||
For the country Belgium, you can use one of these 3 ways to import:
|
||||
|
||||
- Country: Belgium
|
||||
- Country/Database ID: 21
|
||||
- Country/External ID: base.be
|
||||
|
||||
According to your need, you should use one of these 3 ways to reference records in relations. Here
|
||||
is when you should use one or the other, according to your need:
|
||||
|
||||
- Use Country: This is the easiest way when your data come from CSV files that have been created
|
||||
manually.
|
||||
- Use Country/Database ID: You should rarely use this notation. It's mostly used by developers as
|
||||
it's main advantage is to never have conflicts (you may have several records with the same name,
|
||||
but they always have a unique Database ID)
|
||||
- Use Country/External ID: Use External ID when you import data from a third party application.
|
||||
|
||||
When you use External IDs, you can import CSV files with the "External ID" column to define the
|
||||
External ID of each record you import. Then, you will be able to make a reference to that record
|
||||
with columns like "Field/External ID". The following two CSV files give you an example for Products
|
||||
and their Categories.
|
||||
|
||||
:download:`CSV file for categories
|
||||
<export_import_data/External_id_3rd_party_application_product_categories.csv>`.
|
||||
|
||||
:download:`CSV file for Products
|
||||
<export_import_data/External_id_3rd_party_application_products.csv>`.
|
||||
|
||||
What can I do if I have multiple matches for a field?
|
||||
-----------------------------------------------------
|
||||
|
||||
If for example you have two product categories with the child name "Sellable" (ie. "Misc.
|
||||
Products/Sellable" & "Other Products/Sellable"), your validation is halted but you may still import
|
||||
your data. However, we recommend you do not import the data because they will all be linked to the
|
||||
first 'Sellable' category found in the Product Category list ("Misc. Products/Sellable"). We
|
||||
recommend you modify one of the duplicates' values or your product category hierarchy.
|
||||
|
||||
However if you do not wish to change your configuration of product categories, we recommend you use
|
||||
make use of the external ID for this field 'Category'.
|
||||
|
||||
How can I import a many2many relationship field (e.g. a customer that has multiple tags)?
|
||||
-----------------------------------------------------------------------------------------
|
||||
|
||||
The tags should be separated by a comma without any spacing. For example, if you want your customer
|
||||
to be linked to both tags 'Manufacturer' and 'Retailer' then you will encode "Manufacturer,Retailer"
|
||||
in the same column of your CSV file.
|
||||
|
||||
:download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
|
||||
|
||||
|
||||
How can I import a one2many relationship (e.g. several Order Lines of a Sales Order)?
|
||||
-------------------------------------------------------------------------------------
|
||||
|
||||
If you want to import sales order having several order lines; for each order line, you need to
|
||||
reserve a specific row in the CSV file. The first order line will be imported on the same row as the
|
||||
information relative to order. Any additional lines will need an additional row that does not have
|
||||
any information in the fields relative to the order. As an example, here is
|
||||
``purchase.order_functional_error_line_cant_adpat.CSV`` file of some quotations you can import,
|
||||
based on demo data.
|
||||
|
||||
:download:`File for some Quotations <export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`.
|
||||
|
||||
The following CSV file shows how to import purchase orders with their respective purchase order
|
||||
lines:
|
||||
|
||||
:download:`Purchase orders with their respective purchase order lines <export_import_data/o2m_purchase_order_lines.csv>`.
|
||||
|
||||
The following CSV file shows how to import customers and their respective contacts:
|
||||
|
||||
:download:`Customers and their respective contacts <export_import_data/o2m_customers_contacts.csv>`.
|
||||
|
||||
Can I import several times the same record?
|
||||
-------------------------------------------
|
||||
|
||||
If you import a file that contains one of the column "External ID" or "Database ID", records that
|
||||
have already been imported will be modified instead of being created. This is very useful as it
|
||||
allows you to import several times the same CSV file while having made some changes in between two
|
||||
imports. Odoo will take care of creating or modifying each record depending if it's new or not.
|
||||
|
||||
This feature allows you to use the Import/Export tool of Odoo to modify a batch of records in your
|
||||
favorite spreadsheet application.
|
||||
|
||||
What happens if I do not provide a value for a specific field?
|
||||
--------------------------------------------------------------
|
||||
|
||||
If you do not set all fields in your CSV file, Odoo will assign the default value for every non
|
||||
defined fields. But if you set fields with empty values in your CSV file, Odoo will set the EMPTY
|
||||
value in the field, instead of assigning the default value.
|
||||
|
||||
How to export/import different tables from an SQL application to Odoo?
|
||||
----------------------------------------------------------------------
|
||||
|
||||
If you need to import data from different tables, you will have to recreate relations between
|
||||
records belonging to different tables. (e.g. if you import companies and persons, you will have to
|
||||
recreate the link between each person and the company they work for).
|
||||
|
||||
To manage relations between tables, you can use the "External ID" facilities of Odoo. The "External
|
||||
ID" of a record is the unique identifier of this record in another application. This "External ID"
|
||||
must be unique across all the records of all objects, so it's a good practice to prefix this
|
||||
"External ID" with the name of the application or table. (like 'company_1', 'person_1' instead of
|
||||
'1')
|
||||
|
||||
As an example, suppose you have a SQL database with two tables you want to import: companies and
|
||||
persons. Each person belong to one company, so you will have to recreate the link between a person
|
||||
and the company he work for. (If you want to test this example, here is a :download:`dump of such a
|
||||
PostgreSQL database <export_import_data/database_import_test.sql>`)
|
||||
|
||||
We will first export all companies and their "External ID". In PSQL, write the following command:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
|
||||
|
||||
This SQL command will create the following CSV file:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
External ID,Name,Is a Company
|
||||
company_1,Bigees,True
|
||||
company_2,Organi,True
|
||||
company_3,Boum,True
|
||||
|
||||
To create the CSV file for persons, linked to companies, we will use the following SQL command in PSQL:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
|
||||
|
||||
It will produce the following CSV file:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
External ID,Name,Is a Company,Related Company/External ID
|
||||
person_1,Fabien,False,company_1
|
||||
person_2,Laurence,False,company_1
|
||||
person_3,Eric,False,company_2
|
||||
person_4,Ramsy,False,company_3
|
||||
|
||||
As you can see in this file, Fabien and Laurence are working for the Bigees company (company_1) and
|
||||
Eric is working for the Organi company. The relation between persons and companies is done using the
|
||||
External ID of the companies. We had to prefix the "External ID" by the name of the table to avoid a
|
||||
conflict of ID between persons and companies (person_1 and company_1 who shared the same ID 1 in the
|
||||
original database).
|
||||
|
||||
The two files produced are ready to be imported in Odoo without any modifications. After having
|
||||
imported these two CSV files, you will have 4 contacts and 3 companies. (the firsts two contacts are
|
||||
linked to the first company). You must first import the companies and then the persons.
|
||||
|
||||
How to adapt an import template
|
||||
===============================
|
||||
|
||||
Import templates are provided in the import tool of the most common data to
|
||||
import (contacts, products, bank statements, etc.).
|
||||
You can open them with any spreadsheets software (Microsoft Office,
|
||||
OpenOffice, Google Drive, etc.).
|
||||
|
||||
How to customize the file
|
||||
=========================
|
||||
|
||||
* Remove columns you don't need. We advise to not remove the *ID* one (see
|
||||
why here below).
|
||||
* Set a unique ID to every single record by dragging down the ID sequencing.
|
||||
|
||||
.. image:: export_import_data/dragdown.gif
|
||||
:align: center
|
||||
|
||||
* When you add a new column, Odoo might not be able to map it automatically if its
|
||||
label doesn't fit any field of the system.
|
||||
If so, find the corresponding field using the search.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
|
||||
Then, use the label you found in your import template in order to make it work
|
||||
straight away the very next time you try to import.
|
||||
|
||||
Why an “ID” column
|
||||
==================
|
||||
|
||||
The **ID** (External ID) is an unique identifier for the line item.
|
||||
Feel free to use the one of your previous software to ease the transition to Odoo.
|
||||
|
||||
Setting an ID is not mandatory when importing but it helps in many cases:
|
||||
|
||||
* Update imports: you can import the same file several times without creating duplicates;
|
||||
* Import relation fields (see here below).
|
||||
|
||||
How to import relation fields
|
||||
=============================
|
||||
|
||||
An Odoo object is always related to many other objects (e.g. a product is linked
|
||||
to product categories, attributes, vendors, etc.). To import those relations you need to
|
||||
import the records of the related object first from their own list menu.
|
||||
|
||||
You can do it using either the name of the related record or its ID. The ID is expected when
|
||||
two records have the same name. In such a case add " / ID" at the end of the column title
|
||||
(e.g. for product attributes: Product Attributes / Attribute / ID).
|
||||
@@ -0,0 +1,6 @@
|
||||
External ID,Name,Parent Category/External ID
|
||||
a1,Expenses,product.product_category_all
|
||||
a2,Other Products,product.product_category_all
|
||||
a3,Sellable Products,product.product_category_all
|
||||
a4,Tables,a1
|
||||
a5,Seating furniture,a2
|
||||
|
@@ -0,0 +1,6 @@
|
||||
External ID,Name,Internal Reference,Category/External ID,Can be Expensed,Can be Purchased,Can be Sold,Sale Price,Cost,Supply Method,Product Type,Procurement Method
|
||||
a6,Aluminum Stool,ALS,a5,False,True,True,49.00,25.00,Buy,Stockable Product,Make to Stock
|
||||
a7,Chair,CHR,a5,False,True,True,89.00,40.00,Buy,Stockable Product,Make to Stock
|
||||
a8,Table,TBL,a4,False,True,True,169.00,100.00,Buy,Stockable Product,Make to Stock
|
||||
a9,Software Book Tutorial,SBT,a2,False,True,False,19.00,8.00,Buy,Consumable,Make to Stock
|
||||
a10,Fuel,FL,a1,True,False,False,0.30,0.25,Buy,Service,Make to Stock
|
||||
|
@@ -0,0 +1,154 @@
|
||||
--
|
||||
-- PostgreSQL database dump
|
||||
--
|
||||
|
||||
SET statement_timeout = 0;
|
||||
SET client_encoding = 'UTF8';
|
||||
SET standard_conforming_strings = off;
|
||||
SET check_function_bodies = false;
|
||||
SET client_min_messages = warning;
|
||||
SET escape_string_warning = off;
|
||||
|
||||
SET search_path = public, pg_catalog;
|
||||
|
||||
SET default_tablespace = '';
|
||||
|
||||
SET default_with_oids = false;
|
||||
|
||||
--
|
||||
-- Name: companies; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
||||
--
|
||||
|
||||
CREATE TABLE companies (
|
||||
id integer NOT NULL,
|
||||
company_name character varying
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.companies OWNER TO fp;
|
||||
|
||||
--
|
||||
-- Name: companies_id_seq; Type: SEQUENCE; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
CREATE SEQUENCE companies_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.companies_id_seq OWNER TO fp;
|
||||
|
||||
--
|
||||
-- Name: companies_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
ALTER SEQUENCE companies_id_seq OWNED BY companies.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: companies_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('companies_id_seq', 3, true);
|
||||
|
||||
|
||||
--
|
||||
-- Name: persons; Type: TABLE; Schema: public; Owner: fp; Tablespace:
|
||||
--
|
||||
|
||||
CREATE TABLE persons (
|
||||
id integer NOT NULL,
|
||||
company_id integer,
|
||||
person_name character varying
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.persons OWNER TO fp;
|
||||
|
||||
--
|
||||
-- Name: persons_id_seq; Type: SEQUENCE; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
CREATE SEQUENCE persons_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.persons_id_seq OWNER TO fp;
|
||||
|
||||
--
|
||||
-- Name: persons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
ALTER SEQUENCE persons_id_seq OWNED BY persons.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: persons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('persons_id_seq', 4, true);
|
||||
|
||||
|
||||
--
|
||||
-- Name: id; Type: DEFAULT; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY companies ALTER COLUMN id SET DEFAULT nextval('companies_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: id; Type: DEFAULT; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY persons ALTER COLUMN id SET DEFAULT nextval('persons_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: companies; Type: TABLE DATA; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
COPY companies (id, company_name) FROM stdin;
|
||||
1 Bigees
|
||||
2 Organi
|
||||
3 Boum
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: persons; Type: TABLE DATA; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
COPY persons (id, company_id, person_name) FROM stdin;
|
||||
1 1 Fabien
|
||||
2 1 Laurence
|
||||
3 2 Eric
|
||||
4 3 Ramsy
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Name: companies_pkey; Type: CONSTRAINT; Schema: public; Owner: fp; Tablespace:
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY companies
|
||||
ADD CONSTRAINT companies_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: persons_company_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: fp
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY persons
|
||||
ADD CONSTRAINT persons_company_id_fkey FOREIGN KEY (company_id) REFERENCES companies(id);
|
||||
|
||||
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,6 @@
|
||||
Name,Reference,Tags,Customer,Street,City,Country
|
||||
Credit & Leasing,3,Services,True,Central Avenue 814,Johannesburg,South Africa
|
||||
Services & Finance,5,"Consultancy Services,IT Services",True,Grove Road 5,London,United Kingdom
|
||||
Hydra Supplies,6,"Manufacturer,Retailer",True,Palm Street 9,Los Angeles,United States
|
||||
Bolts & Screws,8,"Wholesaler,Components Buyer",True,Rua Américo 1000,Campinas,Brazil
|
||||
National Parts & Supplies,18,"Manufacturer,Wholesaler",True,Guangdong Way 20,Shenzen,China
|
||||
|
@@ -0,0 +1,9 @@
|
||||
Name,Is a company,Related company,Address type,Customer,Supplier,Street,ZIP,City,State,Country
|
||||
Aurora Shelves,1,,,1,0,25 Pacific Road,95101,San José,CA,United States
|
||||
Roger Martins,0,Aurora Shelves,Invoice address,1,0,27 Pacific Road,95102,San José,CA,United States
|
||||
House Sales Direct,1,,,1,0,104 Saint Mary Avenue,94059,Redwood,CA,United States
|
||||
Yvan Holiday,0,House Sales Direct,Contact,1,0,104 Saint Mary Avenue,94060,Redwood,CA,United States
|
||||
Jack Unsworth,0,House Sales Direct,Invoice address,1,0,227 Jackson Road,94061,Redwood,CA,United States
|
||||
Michael Mason,0,,,1,0,16 5th Avenue,94104,San Francisco,CA,United States
|
||||
International Wood,1,,,1,0,748 White House Boulevard,20004,Washington,DC,United States
|
||||
Sharon Pecker,0,International Wood,Invoice address,1,0,755 White House Boulevard,20005,Washington,DC,United States
|
||||
|
@@ -0,0 +1,10 @@
|
||||
Order Date,Order Reference,Supplier,Destination,Pricelist,Order Lines / Product,Order Lines / Quantity
|
||||
2012-12-15,PO00008,ASUSTeK,Stock,Default Purchase Pricelist,ADPT,20
|
||||
,,,,,CARD,30
|
||||
,,,,,C-Case,40
|
||||
2012-12-15,PO00009,Axelor,Stock,Default Purchase Pricelist,CD,5
|
||||
,,,,,CPUa8,15
|
||||
2012-12-15,PO000010,China Export,Stock,Default Purchase Pricelist,HDD SH-1,10
|
||||
,,,,,HDD SH-2,20
|
||||
,,,,,LAP-CUS,35
|
||||
,,,,,LAP-E5,40
|
||||
|
@@ -0,0 +1,6 @@
|
||||
"Order Reference","Supplier","Destination","Pricelist","Order Lines / Product","Order Lines / Quantity"
|
||||
"PO000020","ASUSTeK","Stock","Default Purchase Pricelist","ADPT",20
|
||||
,,,,"CARD",30
|
||||
,,,,"C-Case",40
|
||||
"PO000021","Axelor","Stock","Default Purchase Pricelist","CD",5
|
||||
,,,,"CPUa8",15
|
||||
|
@@ -0,0 +1,192 @@
|
||||
=====================
|
||||
In-app purchase (IAP)
|
||||
=====================
|
||||
|
||||
.. |IAP| replace:: :abbr:`IAP (In-app purchases)`
|
||||
|
||||
In-app purchases (IAP) are optional services that enhance Odoo databases. Each service provides its
|
||||
own specific features and functionality. A full list of services is available on the `Odoo IAP
|
||||
Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
|
||||
.. image:: in_app_purchase/iap.png
|
||||
:align: center
|
||||
:alt: The IAP catalog with various services available on IAP.Odoo.com.
|
||||
|
||||
.. example::
|
||||
The :guilabel:`SMS` service sends text messages to contacts directly from the database, and the
|
||||
:guilabel:`Documents Digitization` service digitizes scanned or PDF vendor bills, expenses, and
|
||||
resumes with optical character recognition (OCR) and artificial intelligence (AI).
|
||||
|
||||
|IAP| services do **not** need to be configured or set up before use. Odoo users can simply click on
|
||||
the service in the app to activate it. However, each service requires its own prepaid credits, and
|
||||
when they run out, users **must** :ref:`buy more <iap/buying_credits>` in order to keep using it.
|
||||
|
||||
.. note::
|
||||
Users with an Enterprise version of Odoo Online get free credits to test IAP features.
|
||||
|
||||
.. _in_app_purchase/portal:
|
||||
|
||||
IAP services
|
||||
============
|
||||
|
||||
|IAP| services are provided by Odoo, as well as third-parties, and have a wide range of uses.
|
||||
|
||||
The following |IAP| services are provided by Odoo:
|
||||
|
||||
- :guilabel:`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
|
||||
with OCR and AI.
|
||||
- :guilabel:`Partner Autocomplete`: automatically populates contact records with corporate data.
|
||||
- :guilabel:`SMS`: sends SMS text messages to contacts directly from the database.
|
||||
- :guilabel:`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
|
||||
into quality leads and opportunities.
|
||||
- :guilabel:`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
|
||||
|
||||
For more information on every service currently available, visit the `Odoo IAP Catalog
|
||||
<https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
|
||||
Use IAP services
|
||||
----------------
|
||||
|
||||
|IAP| services are automatically integrated with Odoo, and do **not** require users to configure any
|
||||
settings. To use a service, simply interact with it wherever it appears in the database.
|
||||
|
||||
.. example::
|
||||
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
|
||||
|
||||
This can be done by clicking the :guilabel:`📱 (phone) SMS` icon within the database.
|
||||
|
||||
.. image:: in_app_purchase/sms-icon.png
|
||||
:align: center
|
||||
:alt: The SMS icon on a typical contact information form located within an Odoo database.
|
||||
|
||||
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
|
||||
|
||||
#. Navigate to the :menuselection:`Contacts application`, and click on a contact with a mobile
|
||||
phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
|
||||
contact form.
|
||||
#. Hover the mouse over the :guilabel:`Phone` or :guilabel:`Mobile` field, and a :guilabel:`📱
|
||||
(phone) SMS` icon appears to the right.
|
||||
#. Click the :guilabel:`📱 (phone) SMS` icon, and a :guilabel:`Send SMS Text Message` pop-up
|
||||
window appears.
|
||||
#. Type a message in the :guilabel:`Message` field of the :guilabel:`Send SMS Text Message`
|
||||
pop-up window. Then, click the :guilabel:`Send SMS` button. Odoo then sends the message, via
|
||||
SMS, to the contact, and logs what was sent in the *chatter* of the contact's form.
|
||||
|
||||
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
|
||||
deducted from the existing credits. If there are not enough credits to send the message, Odoo
|
||||
prompts the user to purchase more.
|
||||
|
||||
.. seealso::
|
||||
For more information on how to use various |IAP| services, and for more in-depth instructions
|
||||
related to SMS functionality in Odoo, review the documentation below:
|
||||
|
||||
- :doc:`Lead mining </applications/sales/crm/acquire_leads/lead_mining>`
|
||||
- :doc:`Enrich your contacts base with Partner Autocomplete
|
||||
</applications/sales/crm/optimize/partner_autocomplete>`
|
||||
- :doc:`SMS essentials </applications/marketing/sms_marketing/essentials/sms_essentials>`
|
||||
|
||||
.. _in_app_purchase/credits:
|
||||
|
||||
IAP credits
|
||||
===========
|
||||
|
||||
Every time an |IAP| service is used, the prepaid credits for that service are spent. Odoo prompts
|
||||
the purchase of more credits when there are not enough credits left to continue using a service.
|
||||
Email alerts can also be set up for when :ref:`credits are low <in_app_purchase/low-credits>`.
|
||||
|
||||
Credits are purchased in *Packs* from the `Odoo IAP Catalog
|
||||
<https://iap.odoo.com/iap/all-in-app-services>`_, and pricing is specific to each service.
|
||||
|
||||
.. example::
|
||||
The `SMS service <https://iap.odoo.com/iap/in-app-services/1>`_ has four packs available, in
|
||||
denominations of:
|
||||
|
||||
- :guilabel:`Starter Pack`: 10 credits
|
||||
- :guilabel:`Standard Pack`: 100 credits
|
||||
- :guilabel:`Advanced Pack`: 500 credits
|
||||
- :guilabel:`Expert Pack`: 1,000 credits
|
||||
|
||||
.. image:: in_app_purchase/packs.png
|
||||
:align: center
|
||||
:alt: Four different packs of credits for the SMS IAP service.
|
||||
|
||||
The number of credits consumed depends on the length of the SMS and the country of destination.
|
||||
|
||||
For more information, refer to the :doc:`SMS Pricing and FAQ
|
||||
</applications/marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
|
||||
|
||||
.. _iap/buying_credits:
|
||||
|
||||
Buy credits
|
||||
-----------
|
||||
|
||||
If there are not enough credits to perform a task, the database automatically prompts the purchase
|
||||
of more credits.
|
||||
|
||||
Users can check the current balance of credits for each service, and manually purchase more credits,
|
||||
by navigating to the :menuselection:`Settings app --> Search IAP --> View My Services`.
|
||||
|
||||
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
|
||||
additional credits can be purchased.
|
||||
|
||||
Manually buy credits
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To manually buy credits in Odoo, follow these steps:
|
||||
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
|
||||
.. image:: in_app_purchase/view-services.png
|
||||
:align: center
|
||||
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
|
||||
|
||||
#. Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page,
|
||||
where additional credits can be purchased.
|
||||
#. On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button.
|
||||
|
||||
.. image:: in_app_purchase/account-info.png
|
||||
:align: center
|
||||
:alt: The Account Information page for an IAP service showing the Buy Credit button.
|
||||
|
||||
#. Doing so loads a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click
|
||||
:guilabel:`Buy` on the desired pack of credits. Then, follow the prompts to enter payment
|
||||
details, and confirm the order.
|
||||
|
||||
.. image:: in_app_purchase/buy-pack.png
|
||||
:align: center
|
||||
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
|
||||
|
||||
#. Once the transaction is complete, the credits are available for use in the database.
|
||||
|
||||
.. _in_app_purchase/low-credits:
|
||||
|
||||
Low-credit notification
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
It is possible to be notified when credits are low, in order to avoid running out of credits, while
|
||||
using an |IAP| service. To do that, follow this process:
|
||||
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
#. The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From
|
||||
here, click on the desired |IAP| account to view that service's :guilabel:`Account Information`
|
||||
page.
|
||||
#. On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` box. Doing so reveals
|
||||
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
|
||||
|
||||
.. image:: in_app_purchase/low-credits.png
|
||||
:align: center
|
||||
:alt: Odoo will send an email alert when credits for this service fall below the threshold.
|
||||
|
||||
#. In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the minimum
|
||||
threshold for this service.
|
||||
#. In the :guilabel:`Warning Email` field, enter the email address that should receive the
|
||||
notification.
|
||||
|
||||
Odoo sends a low-credit alert to the :guilabel:`Warning Email` when the balance of credits falls
|
||||
below the amount listed as the :guilabel:`Threshold`.
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,187 @@
|
||||
=========
|
||||
Reporting
|
||||
=========
|
||||
|
||||
You can find several reports under the :guilabel:`Reporting` menu of most apps that let you analyze
|
||||
and visualize the data of your records.
|
||||
|
||||
.. _reporting/views:
|
||||
|
||||
Selecting a view
|
||||
================
|
||||
|
||||
Depending on the report, Odoo can display the data in various ways. Sometimes, a unique view
|
||||
fully tailored to the report is available, while several views are available for others. However,
|
||||
two generic views are dedicated to reporting: the graph and pivot views.
|
||||
|
||||
.. _reporting/views/graph:
|
||||
|
||||
Graph view
|
||||
----------
|
||||
|
||||
The :ref:`graph view <reporting/using-graph>` is used to visualize your records' data, helping you
|
||||
identify patterns and trends. The view is often found under the :guilabel:`Reporting` menu of apps
|
||||
but can be found elsewhere. Click the **graph view button** located at the top right to access
|
||||
it.
|
||||
|
||||
.. image:: reporting/graph-button.png
|
||||
:alt: Selecting the graph view
|
||||
|
||||
.. _reporting/views/pivot:
|
||||
|
||||
Pivot view
|
||||
----------
|
||||
|
||||
The :ref:`pivot view <reporting/using-pivot>` is used to aggregate your records' data and break it
|
||||
down for analysis. The view is often found under the :guilabel:`Reporting` menu of apps but can be
|
||||
found elsewhere. Click the **pivot view button** located at the top right to access it.
|
||||
|
||||
.. image:: reporting/pivot-button.png
|
||||
:alt: Selecting the pivot view
|
||||
|
||||
.. _reporting/choosing-measures:
|
||||
|
||||
Choosing measures
|
||||
=================
|
||||
|
||||
After selecting a view, you should ensure only the relevant records are :doc:`filtered <search>`.
|
||||
Next, you should choose what is measured. By default, a measure is always selected. If you wish to
|
||||
edit it, click :guilabel:`Measures` and choose one or, only for pivots, multiple measures.
|
||||
|
||||
.. note::
|
||||
When you select a measure, Odoo aggregates the values recorded on that field for the filtered
|
||||
records. Only numerical fields (:ref:`integer <studio/fields/simple-fields/integer>`,
|
||||
:ref:`decimal <studio/fields/simple-fields/decimal>`, :ref:`monetary
|
||||
<studio/fields/simple-fields/monetary>`) can be measured. In addition, the :guilabel:`Count`
|
||||
option is used to count the total number of filtered records.
|
||||
|
||||
After choosing what you want to measure, you can define how the data should be :ref:`grouped
|
||||
<search/group>` depending on the dimension you want to analyze. By default, the data is often
|
||||
grouped by *Date > Month*, which is used to analyze the evolution of a measure over the months.
|
||||
|
||||
.. tip::
|
||||
When you filter a single time period, the option to compare it against another one appears.
|
||||
|
||||
.. image:: reporting/comparison.png
|
||||
:alt: Using the comparison option
|
||||
|
||||
.. example::
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Select measures
|
||||
|
||||
Among other measures, you could add the :guilabel:`Margin` and :guilabel:`Count` measures
|
||||
to the Sales Analysis report. By default, the :guilabel:`Untaxed Amount` measure is
|
||||
selected.
|
||||
|
||||
.. image:: reporting/measures.png
|
||||
:alt: Selecting different measures on the Sales Analysis report
|
||||
|
||||
.. tab:: Group measures
|
||||
|
||||
You could group the measures by :guilabel:`Product Category` at the level of rows on the
|
||||
previous Sales Analysis report example.
|
||||
|
||||
.. image:: reporting/single-group.png
|
||||
:alt: Adding a group on the Sales Analysis report
|
||||
|
||||
.. _reporting/using-pivot:
|
||||
|
||||
Using the pivot view
|
||||
====================
|
||||
|
||||
Grouping data is quintessential to the pivot view. It enables drilling down the data to gain deeper
|
||||
insights. While you can use the :guilabel:`Group By` option to quickly add a group at the level of
|
||||
rows, as shown in the example above, you can also click the plus button (:guilabel:`➕`) next to the
|
||||
:guilabel:`Total` header at the level of rows *and* columns, and then select one of the
|
||||
**preconfigured groups**. To remove one, click the minus button (:guilabel:`➖`).
|
||||
|
||||
Once you have added a group, you can add new ones on the opposite axis or the newly created
|
||||
subgroups.
|
||||
|
||||
.. example::
|
||||
You could further divide the measures on the previous Sales Analysis report example by the
|
||||
:guilabel:`Salesperson` group at the level of columns and by the :guilabel:`Order Date > Month`
|
||||
group on the :guilabel:`All / Saleable / Office Furniture` product category.
|
||||
|
||||
.. image:: reporting/multiple-groups.png
|
||||
:alt: Adding multiple groups on the Sales Analysis report
|
||||
|
||||
.. tip::
|
||||
- Switch the rows and columns' groups by clicking the flip axis button (:guilabel:`⇄`).
|
||||
- Click on a measure's label to sort the values by ascending (⏶) or descending (⏷) order.
|
||||
- Download a `.xlsx` version of the pivot by clicking the download button (:guilabel:`⭳`).
|
||||
|
||||
.. _reporting/using-graph:
|
||||
|
||||
Using the graph view
|
||||
====================
|
||||
|
||||
Three graphs are available: the bar, line, and pie charts.
|
||||
|
||||
**Bar charts** are used to show the distribution or a comparison of several categories. They are
|
||||
especially useful as they can deal with larger data sets.
|
||||
|
||||
**Line charts** are useful to show changing time series and trends over time.
|
||||
|
||||
**Pie charts** are used to show the distribution or a comparison of a small number of categories
|
||||
when they form a meaningful whole.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Bar chart
|
||||
|
||||
.. image:: reporting/bar.png
|
||||
:alt: Viewing the Sales Analysis report as a bar chart
|
||||
|
||||
.. tab:: Line chart
|
||||
|
||||
.. image:: reporting/line.png
|
||||
:alt: Viewing the Sales Analysis report as a line chart
|
||||
|
||||
.. tab:: Pie chart
|
||||
|
||||
.. image:: reporting/pie.png
|
||||
:alt: Viewing the Sales Analysis report as a pie chart
|
||||
|
||||
.. tip::
|
||||
For **bar** and **line** charts, you can use the stacked option when you have at least two
|
||||
groups, which then appear on top of each other instead of next to each other.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Stacked bar chart
|
||||
|
||||
.. image:: reporting/stacked-bar.png
|
||||
:alt: Stacked bar chart example
|
||||
|
||||
.. tab:: Regular bar chart
|
||||
|
||||
.. image:: reporting/non-stacked-bar.png
|
||||
:alt: Non-stacked bar chart example
|
||||
|
||||
.. tab:: Stacked line chart
|
||||
|
||||
.. image:: reporting/stacked-line.png
|
||||
:alt: Stacked line chart example
|
||||
|
||||
.. tab:: Regular line chart
|
||||
|
||||
.. image:: reporting/non-stacked-line.png
|
||||
:alt: Non-stacked line chart example
|
||||
|
||||
For **line** charts, you can use the cumulative option to sum values, which is especially useful
|
||||
to show the change in growth over a time period.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Cumulative line chart
|
||||
|
||||
.. image:: reporting/cumulative.png
|
||||
:alt: Cumulative line chart example
|
||||
|
||||
.. tab:: Regular line chart
|
||||
|
||||
.. image:: reporting/non-cumulative.png
|
||||
:alt: Regular line chart example
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,100 @@
|
||||
=========================
|
||||
Search and filter records
|
||||
=========================
|
||||
|
||||
Odoo uses filters to include only the most relevant records depending on the purpose of the view you
|
||||
are on. However, you can edit the default filter or search for specific values.
|
||||
|
||||
.. _search/preconfigured-filters:
|
||||
|
||||
Preconfigured filters
|
||||
=====================
|
||||
|
||||
You can modify the default selection of records by clicking :guilabel:`Filters` and selecting one or
|
||||
several **preconfigured filters**.
|
||||
|
||||
.. example::
|
||||
On the Sales Analysis report, only records at the sales order stage are selected by default.
|
||||
However, you could *also* include records at the quotation stage by selecting
|
||||
:guilabel:`Quotations`. Furthermore, you could *only* include records from a specific year, for
|
||||
example *2022*, by selecting :menuselection:`Order Date --> 2022`.
|
||||
|
||||
.. image:: search/preconfigured-filters.png
|
||||
:align: center
|
||||
:alt: Using preconfigured filters on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
If you select preconfigured filters from the same group (i.e., that are *not* separated by an
|
||||
horizontal line), the records can match *any* condition to be included. However, if you select
|
||||
filters from different groups, the records have to match *all* condition to be included.
|
||||
|
||||
.. _search/custom-filters:
|
||||
|
||||
Custom filters
|
||||
==============
|
||||
|
||||
You can create custom filters using most fields present on the model by clicking
|
||||
:menuselection:`Filters --> Add Custom Filter`, selecting a field, an operator, a value, and
|
||||
clicking :guilabel:`Apply`.
|
||||
|
||||
.. example::
|
||||
You could *only* include records from a single salesperson on the Sales Analysis report, for
|
||||
example *Mitchell Admin*, by selecting :guilabel:`Salesperson` as the field, :guilabel:`is equal
|
||||
to` as the operator, and typing `Mitchell Admin` as the value.
|
||||
|
||||
.. image:: search/custom-filter.png
|
||||
:align: center
|
||||
:alt: Using a custom filter on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
If the records should *only* match one of several conditions, click :guilabel:`Add a condition`
|
||||
before applying a custom filter. If the records should match *all* conditions, add new custom
|
||||
filters instead.
|
||||
|
||||
.. _search/values:
|
||||
|
||||
Search for values
|
||||
=================
|
||||
|
||||
You can use the search field to quickly look for specific values and add them as a filter. Either
|
||||
type the full value you are searching for and select the desired field, or type a part of the
|
||||
value, click the dropdown button (:guilabel:`⏵`) before the chosen field, and select the exact
|
||||
value you are looking for.
|
||||
|
||||
.. example::
|
||||
Instead of adding a custom filter to select records where *Mitchell Admin* is the salesperson on
|
||||
the Sales Analysis report, you could search for `Mitch`, click the dropdown button
|
||||
(:guilabel:`⏵`) next to :guilabel:`Search Salesperson for: Mitch`, and select
|
||||
:guilabel:`Mitchell Admin`.
|
||||
|
||||
.. image:: search/search-values.png
|
||||
:align: center
|
||||
:alt: Searching for a specific value on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
Using the search field is equivalent to using the *contains* operator when adding a custom
|
||||
filter. If you enter a partial value and directly select the desired field, *all* records
|
||||
containing the characters you typed for the selected field will be included.
|
||||
|
||||
.. _search/group:
|
||||
|
||||
Group records
|
||||
=============
|
||||
|
||||
You can click :guilabel:`Group By` below the search field to cluster records together according to
|
||||
one of the **preconfigured groups**.
|
||||
|
||||
.. example::
|
||||
You could group the records by salesperson on the Sales Analysis report by clicking
|
||||
:guilabel:`Group By` and selecting :guilabel:`Salesperson`. No records are filtered out.
|
||||
|
||||
.. image:: search/group.png
|
||||
:align: center
|
||||
:alt: Grouping records on the Sales Analysis report
|
||||
|
||||
You can **customize groups** by using a wide selection of fields present on the model. To do so,
|
||||
click :menuselection:`Group By --> Add Custom Group`, select a field, and click :guilabel:`Apply`.
|
||||
|
||||
.. note::
|
||||
You can use several groups at the same time. The first group you select is the main cluster, the
|
||||
next one you add further divides the main group's categories, and so on.
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |