[REF][MOV] documentation apocalypse

Prior to this commit, the Odoo documentation was mainly split between
two repositories: odoo/odoo/doc and odoo/documentation-user. Some bits
of documentation were also hosted elsewhere (e.g., wiki, upgrade, ...).
This was causing several problems among which:
  - The theme, config, Makefile, and similar technical resources had to
    be duplicated. This resulted in inconsistent layout, features, and
    build environments from one documentation to another.
  - Some pages did not fit either documentation as they were relevant
    for both users and developers. Some were relevant to neither of the
    two (e.g., DB management).
  - Cross-doc references had to be absolute links and they broke often.
  - Merging large image files in the developer documentation would bloat
    the odoo/odoo repository. Some contributions had to be lightened to
    avoid merging too many images (e.g., Odoo development tutorials).
  - Long-time contributors to the user documentation were chilly about
    going through the merging process of the developer documentation
    because of the runbot, mergebot, `odoo-dev` repository, etc.
  - Some contributors would look for the developer documentation in the
    `odoo/documentation-user` repository.
  - Community issues about the user documentation were submitted on the
    `odoo/odoo` repository and vice-versa.

Merging all documentations in one repository will allow us to have one
place, one theme, one work process, and one set of tools (build
environment, ...) for all of the Odoo docs.

As this is a good opportunity to revamp the layout of the documentation,
a brand new theme replaces the old one. It features a new way to
navigate the documentation, centered on the idea of always letting the
reader know what is the context (enclosing section, child pages, page
structure ...) of the page they are reading. The previous theme would
quickly confuse readers as they navigated the documentation and followed
cross-application links.

The chance is also taken to get rid of all the technical dangling parts,
performance issues, and left-overs. Except for some page-specific JS
scripts, the Odoo theme Sphinx extension is re-written from scratch
based on the latest Sphinx release to benefit from the improvements and
ease future contributions.

task-2351938
task-2352371
task-2205684
task-2352544

Closes #945
This commit is contained in:
Antoine Vandevenne (anv)
2021-04-30 12:40:29 +02:00
committed by Antoine Vandevenne (anv)
parent eac5e9f865
commit e3fee2cf46
2471 changed files with 39885 additions and 60126 deletions
+11
View File
@@ -0,0 +1,11 @@
==============
Authentication
==============
.. toctree::
:titlesonly:
auth/google
auth/azure
auth/ldap
@@ -0,0 +1,6 @@
=====
OAuth
=====
Due to specific requirements in Azure's OAuth implementation,
Microsoft Azure OAuth identification is NOT compatible with Odoo at the moment.
@@ -0,0 +1,48 @@
=======================================================
How to allow users to sign in with their Google account
=======================================================
- Connect to your Google account and go to `https://console.developers.google.com/ <https://console.developers.google.com/>`_.
- Click on **Create Project** and enter the project name and other details.
.. image:: media/google01.png
:align: center
.. image:: media/google02.png
:align: center
- Click on **Use Google APIs**
.. image:: media/google03.png
:align: center
- On the left side menu, select the sub menu **Credentials** (from **API Manager**) then select **OAuth consent screen**.
.. image:: media/google04.png
:align: center
- Fill in your address, email and the product name (for example odoo) and then save.
.. image:: media/google05.png
:align: center
- Then click on **Add Credentials** and select the second option (OAuth 2.0 Client ID).
.. image:: media/google06.png
:align: center
.. image:: media/google07.png
:align: center
- Check that the application type is set on **Web Application**. Now configure the allowed pages on which you will be redirected.
- To achieve this, complete the field **Authorized redirect URIs**. Copy paste the following link in the box: http://mydomain.odoo.com/auth_oauth/signin. Then click on **Create**
.. image:: media/google08.png
:align: center
.. image:: media/google09.png
:align: center
- Once done, you receive two information (your Client ID and Client Secret). You have to insert your Client ID in the **General Settings**.
@@ -0,0 +1,44 @@
=======================================
How to allow users to sign in with LDAP
=======================================
- Install the LDAP module in General Settings.
- Click on **Create** in Setup your LDAP Server.
.. image:: media/ldap01.png
:align: center
.. image:: media/ldap02.png
:align: center
- Choose the company about to use the LDAP.
.. image:: media/ldap03.png
:align: center
- In **Server Information**, enter the IP address of your server and the port it listens to.
- Tick **User TLS** if your server is compatible.
.. image:: media/ldap04.png
:align: center
- In **Login Information**, enter ID and password of the account used to query the server. If left empty, the server will be queried anonymously.
.. image:: media/ldap05.png
:align: center
- In **Process Parameter**, enter the domain name of your LDAP server in LDAP nomenclature (e.g. ``dc=example,dc=com``).
- In **LDAP filter**, enter ``uid=%s``
.. image:: media/ldap06.png
:align: center
- In **User Information**, tick *Create User* if you want Odoo to create a User profile the first time someone log in with LDAP.
- In **Template User**, indicate a template for the new profiles created. If left blanked, the admin profile will be used as template.
.. image:: media/ldap07.png
:align: center
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

@@ -0,0 +1,9 @@
===========
Data Import
===========
.. toctree::
:titlesonly:
base_import/adapt_template
base_import/import_faq
@@ -0,0 +1,50 @@
===============================
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:: media/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:: media/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
1 External ID Name Parent Category/External ID
2 a1 Expenses product.product_category_all
3 a2 Other Products product.product_category_all
4 a3 Sellable Products product.product_category_all
5 a4 Tables a1
6 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
1 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
2 a6 Aluminum Stool ALS a5 False True True 49.00 25.00 Buy Stockable Product Make to Stock
3 a7 Chair CHR a5 False True True 89.00 40.00 Buy Stockable Product Make to Stock
4 a8 Table TBL a4 False True True 169.00 100.00 Buy Stockable Product Make to Stock
5 a9 Software Book Tutorial SBT a2 False True False 19.00 8.00 Buy Consumable Make to Stock
6 a10 Fuel FL a1 True False False 0.30 0.25 Buy Service Make to Stock
@@ -0,0 +1,155 @@
--
-- 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
--
@@ -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
1 Name Reference Tags Customer Street City Country
2 Credit & Leasing 3 Services True Central Avenue 814 Johannesburg South Africa
3 Services & Finance 5 Consultancy Services,IT Services True Grove Road 5 London United Kingdom
4 Hydra Supplies 6 Manufacturer,Retailer True Palm Street 9 Los Angeles United States
5 Bolts & Screws 8 Wholesaler,Components Buyer True Rua Américo 1000 Campinas Brazil
6 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
1 Name Is a company Related company Address type Customer Supplier Street ZIP City State Country
2 Aurora Shelves 1 1 0 25 Pacific Road 95101 San José CA United States
3 Roger Martins 0 Aurora Shelves Invoice address 1 0 27 Pacific Road 95102 San José CA United States
4 House Sales Direct 1 1 0 104 Saint Mary Avenue 94059 Redwood CA United States
5 Yvan Holiday 0 House Sales Direct Contact 1 0 104 Saint Mary Avenue 94060 Redwood CA United States
6 Jack Unsworth 0 House Sales Direct Invoice address 1 0 227 Jackson Road 94061 Redwood CA United States
7 Michael Mason 0 1 0 16 5th Avenue 94104 San Francisco CA United States
8 International Wood 1 1 0 748 White House Boulevard 20004 Washington DC United States
9 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
1 Order Date Order Reference Supplier Destination Pricelist Order Lines / Product Order Lines / Quantity
2 2012-12-15 PO00008 ASUSTeK Stock Default Purchase Pricelist ADPT 20
3 CARD 30
4 C-Case 40
5 2012-12-15 PO00009 Axelor Stock Default Purchase Pricelist CD 5
6 CPUa8 15
7 2012-12-15 PO000010 China Export Stock Default Purchase Pricelist HDD SH-1 10
8 HDD SH-2 20
9 LAP-CUS 35
10 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
1 Order Reference Supplier Destination Pricelist Order Lines / Product Order Lines / Quantity
2 PO000020 ASUSTeK Stock Default Purchase Pricelist ADPT 20
3 CARD 30
4 C-Case 40
5 PO000021 Axelor Stock Default Purchase Pricelist CD 5
6 CPUa8 15
@@ -0,0 +1,251 @@
============================
How to 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 *Import*.
.. image:: media/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:: media/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:: media/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:: media/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 speadsheet 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 'Save As' dialog box > Check the box 'Edit filter settings' > Save).
Microsoft Excel will allow you to modify only the encoding when saving (in '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 3 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
<files/External_id_3rd_party_application_product_categories.csv>`.
:download:`CSV file for Products
<files/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 <files/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 addtional 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 <files/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 <files/o2m_purchase_order_lines.csv>`.
The following CSV file shows how to import customers and their respective contacts:
:download:`Customers and their respective contacts <files/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 usefull 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 accoss 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 <files/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::
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::
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 orignial 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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+13
View File
@@ -0,0 +1,13 @@
======
Mobile
======
Push Notifications
==================
As of Odoo 12.0, there is no more complex configuration to enable push
notifications in the mobile app.
Simply go to *Settings* > *General Settings* > *Odoo Cloud Notification (OCN)*
and make sure that **Push Notifications** is checked.
@@ -0,0 +1,9 @@
======
Basics
======
.. toctree::
:titlesonly:
odoo_basics/choose_language
odoo_basics/add_user
@@ -0,0 +1,47 @@
=================
How to add a user
=================
Odoo provides you with the option to add additional users at any given
point.
Add individual users
====================
From the Settings module, go to the submenu :menuselection:`Users --> Users` and click on
**CREATE.** First add the name of your new user and the professional
email address - the one he will use to log into Odoo instance - and a
picture.
.. image:: media/add_user01.png
:align: center
Under Access Rights, you can choose which applications your user can
access and use. Different levels of rights are available depending on
the app.
When youre done editing the page and have clicked on **SAVE**, an
invitation email will automatically be sent to the user. The user must
click on it to accept the invitation to your instance and create a
log-in.
.. image:: media/add_user02.png
:align: center
.. note::
Remember that each additional user will increase your subscription fees.
Refer to our `*Pricing page* <https://www.odoo.com/pricing>`__ for more information.
.. image:: media/add_user03.png
:align: center
.. tip::
You can also add a new user on the fly from your dashboard. From the above screenshot,
enter the email address of the user you would like to add and click on **INVITE**.
The user will receive an email invite containing a link to set his password. You
will then be able to define his accesses rights under the :menuselection:`Settings --> Users menu`.
.. seealso::
* `Deactivating Users <../../db_management/documentation.html#deactivating-users>`_
.. todo:: Add link to How to add companies
@@ -0,0 +1,61 @@
================================
Manage Odoo in your own language
================================
Odoo provides you with the option to manage Odoo in different languages,
and each user can use Odoo in his own language .
Load your desired language
==========================
The first thing to do is to load your desired language on your Odoo
instance.
From the general dashboard click on the **Settings** app; on the top
left of the page select :menuselection:`Translations --> Load a Translation`,
select a language to install and click on **LOAD.**
.. image:: media/choose_language01.png
:align: center
.. note::
If you check the "Websites to translate" checkbox you will have the option
to change the navigation language on your website.
Change your language
====================
You can change the language to the installed language by going to the
drop-down menu at the top right side of the screen, choose
**Preferences**.
.. image:: media/choose_language02.png
:align: center
Then change the Language setting to your installed language and click
**SAVE.**
.. image:: media/choose_language03.png
:align: center
Open a new menu to view the changes.
Change another user's language
==============================
Odoo also gives you the possibility for each user to choose his
preferred language.
To change the language for a different user, choose :menuselection:`Users --> Users`
from the Settings app. Here you have a list of all users and you can
choose the user who you'd like to change the language for. Select the
user and click on **Edit** in the top left corner. Under Preferences you
can change the Language to any previously installed language and click
**SAVE.**
.. image:: media/choose_language04.png
:align: center
.. seealso::
* :doc:`../../websites/website/publish/translate`
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,9 @@
========
Unsplash
========
.. toctree::
:titlesonly:
unsplash/unsplash_access_key
unsplash/unsplash_application_id
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

@@ -0,0 +1,37 @@
=======================================================
How to generate an Unsplash access key
=======================================================
.. tip::
**As an SaaS user**, you are ready to use Unsplash. You won't need to follow this guide to set up Unsplash informations, since you will use our own Odoo Unsplash key in a transparent way.
Generate an Unsplash access key for **non-Saas** users
======================================================
- Create an account on `Unsplash.com <https://unsplash.com/join>`_.
- Go to your `applications dashboard <https://unsplash.com/oauth/applications>`_ and click on **New Application**.
.. image:: media/create_app.png
:align: center
- Accept the conditions and click on **Accept terms**.
.. image:: media/accept_terms.png
:align: center
- You will be prompted to insert an **Application name** and a **Description**. Please prefix your application name by "**Odoo:** " so that Unsplash can recognize it as an Odoo instance. Once done, click on **Create application**.
.. image:: media/app_infos.png
:align: center
- You should be redirected to your application details page. Scroll down a bit to find your **access key**.
.. image:: media/access_key.png
:align: center
.. warning::
**As a non-SaaS user**, you won't be able to register for a production Unsplash key and will be limited to your test key that has a restriction of 50 Unsplash requests per hour.
.. seealso::
* :doc:`unsplash_application_id`
@@ -0,0 +1,19 @@
=======================================================
How to generate an Unsplash application ID
=======================================================
.. tip::
You should first create and set up your Unsplash application with this tutorial: :doc:`unsplash_access_key`.
- Go to your `applications dashboard <https://unsplash.com/oauth/applications>`_ and click on your newly created Unsplash application under **Your applications**.
.. image:: media/select_app.png
:align: center
- You will be redirected to your application details page. The **application ID** will be visible in your browser's URL. The URL should be something like ``https://unsplash.com/oauth/applications/<application_id>``
.. image:: media/app_id_url.png
:align: center
.. warning::
**As a non-SaaS user**, you won't be able to register for a production Unsplash key and will be limited to your test key that has a 50 Unsplash requests per hour restriction.