<t t-name="ImportView">
<t t-set="_id" t-value="_.uniqueId('export')"/>
<form action="" method="post" enctype="multipart/form-data" class="oe_import">
- <header>
- <button type="button" disabled="disabled"
- class="oe_button oe_import_button oe_import_validate oe_highlight"
- >Validate</button>
- <button type="button" disabled="disabled"
- class="oe_button oe_import_button oe_import_import"
- >Import</button>
- <span class="oe_fade">or</span>
- <a class="oe_import_cancel" href="#">Cancel</a>
- </header>
- <input type="hidden" name="session_id"
- t-att-value="widget.session.session_id"/>
- <input type="hidden" name="import_id"/>
- <h2>Upload your file</h2>
+ <div class="oe_view_manager oe_view_manager_current">
+ <div class="oe_view_manager_header oe_padding">
- <h2 class="oe_view_title">
- <span class="oe_view_title_text oe_breadcrumb_title">
- <span class="oe_breadcrumb_item">Upload your file</span>
- </span>
++ <h2>
++ Import a CSV File
+ </h2>
+ <input type="hidden" name="session_id"
+ t-att-value="widget.session.session_id"/>
+ <input type="hidden" name="import_id"/>
+ <button type="button" disabled="disabled"
+ class="oe_button oe_import_button oe_import_validate oe_highlight"
+ >Validate</button>
+ <button type="button" disabled="disabled"
+ class="oe_button oe_import_button oe_import_import"
+ >Import</button>
+ <span class="oe_fade">or</span>
+ <a class="oe_import_cancel" href="#">Cancel</a>
+ </div>
+ </div>
+
<p>Select the <a
href="http://en.wikipedia.org/wiki/Comma-separated_values"
class="oe_import_csv" target="_blank">.CSV</a>
<label t-attf-for="file_#{_id}" autofocus="autofocus">CSV File:</label>
<input type="file" id-attf-id="file_#{_id}"
name="file" class="oe_import_file"/>
- <button type="button" class="oe_import_file_reload">
+ <button type="button" class="oe_import_file_reload" title="Reload data to check changes.">
<img src="/web/static/src/img/icons/gtk-refresh.png"/>
</button>
<div class="oe_import_with_file">
</div>
</div>
- <div class="oe_import_with_file">
+ <div class="oe_import_with_file oe_padding">
<h2>Map your data to OpenERP</h2>
<input type="checkbox" class="oe_import_has_header"
id="oe_import_has_header" checked="checked"/>
<table class="oe_import_grid" />
<h2>Frequently Asked Questions</h2>
+
<dl>
<dt><a href="#" class="oe_import_toggle">
Need to import data from an other application?</a></dt>
whenever possible</p>
</dd>
</dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ What can I do when the Import preview table isn't
+ displayed correctly?</a></dt>
+ <dd>
+ <p>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).</p> <p>Note that if your CSV file
+ has a tabulation as separator, OpenERP will not
+ detect the separations. You will need to change the
+ file format options in your spreadsheet application.
+ See the following question.</p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ How can I change the CSV file format options when
+ saving in my spreadsheet application?</a></dt>
+ <dd>
+ <p>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).</p> <p>Microsoft Excel will allow
+ you to modify only the encoding when saving
+ (in 'Save As' dialog box > click 'Tools' dropdown
+ list > Encoding tab).</p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ What's the difference between Database ID and
+ External ID?</a></dt>
+ <dd>
+ <p>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, OpenERP will have to
+ recreate links between the different records.
+ To help you import such fields, OpenERP provides 3
+ mechanisms. You must use one and only one mechanism
+ per field you want to import.</p> <p>For example, to
+ reference the country of a contact, OpenERP proposes
+ you 3 different fields to import: <ul>
+ <li>Country: the name or code of the country</li>
+ <li>Country/Database ID: the unique OpenERP ID for a
+ record, defined by the ID postgresql column</li>
+ <li>Country/External ID: the ID of this record
+ referenced in another application (or the .XML file
+ that imported it)</li> </ul></p> <p>For the country
+ Belgium, you can use one of these 3 ways to import:
+ <ul> <li>Country: Belgium</li> <li>Country/Database
+ ID: 21</li> <li>Country/External ID: base.be</li>
+ </ul></p> <p>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: <ul> <li>Use Country: This is
+ the easiest way when your data come from CSV files
+ that have been created manually.</li> <li>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)</li> <li>Use
+ Country/External ID: Use External ID when you import
+ data from a third party application.</li> </ul></p>
+ <p>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.</p>
+ <a href="/base_import/static/csv/External_id_3rd_party_application_product_categories.csv">CSV file for categories</a><br/>
+ <a href="/base_import/static/csv/External_id_3rd_party_application_products.csv">CSV file for Products</a>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ What can I do if I have multiple matches for a field?
+ </a></dt>
+ <dd>
+ <p>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.<br/>
+ 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'.</p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ How can I import a many2many relationship field
+ (e.g. a customer that has multiple tags)?</a></dt>
+ <dd>
+ <p>The tags should be separated by a comma without any
+ spacing. For example, if you want you customer to be
+ lined to both tags 'Manufacturer' and 'Retailer'
+ then you will encode it as follow "Manufacturer,
+ Retailer" in the same column of your CSV file.</p>
+ <a href="/base_import/static/csv/m2m_customers_tags.csv">
+ CSV file for Manufacturer, Retailer</a><br/>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ How can I import a one2many relationship (e.g. several
+ Order Lines of a Sale Order)?</a></dt>
+ <dd>
+ <p>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.</p>
+ <p>As an example, here is
+ purchase.order_functional_error_line_cant_adpat.CSV
+ file of some quotations you can import, based on demo
+ data.</p>
+ <a href="/base_import/static/csv/purchase.order_functional_error_line_cant_adpat.csv">File for some Quotations</a>
+ <p>The following CSV file shows how to import purchase
+ orders with their respective purchase order lines:</p>
+ <a href="/base_import/static/csv/o2m_purchase_order_lines.csv">Purchase orders with their respective purchase order lines</a>
+ <p>The following CSV file shows how to import
+ suppliers and their respective contacts</p>
+ <a href="/base_import/static/csv/o2m_suppliers_contacts.csv">Suppliers and their respective contacts</a>
+ </dd>
+ </dl>
+
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ Can I import several times the same record?</a></dt>
+ <dd>
+ <p>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. OpenERP will
+ take care of creating or modifying each record
+ depending if it's new or not.</p> <p> This feature
+ allows you to use the Import/Export tool of OpenERP to
+ modify a batch of records in your favorite spreadsheet
+ application.</p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ What happens if I do not provide a value for a
+ specific field?</a></dt>
+ <dd>
+ <p>If you do not set all fields in your CSV file,
+ OpenERP will assign the default value for every non
+ defined fields. But if you
+ set fields with empty values in your CSV file, OpenERP
+ will set the EMPTY value in the field, instead of
+ assigning the default value.</p>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt><a href="#" class="oe_import_toggle">
+ How to export/import different tables from an SQL
+ application to OpenERP?</a></dt>
+ <dd>
+ <p>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).</p> <p>To manage relations between tables,
+ you can use the "External ID" facilities of OpenERP.
+ 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')
+ </p> <p>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 <a href="/base_import/static/csv/database_import_test.sql">
+ dump of such a PostgreSQL database</a>).</p>
+ <p>We will first export all companies and their
+ "External ID". In PSQL, write the following command:
+ </p> <p>    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;</p>
+ <p>This SQL command will create the following CSV file:
+ <br/>    External ID,Name,Is a Company
+ <br/>    company_1,Bigees,True
+ <br/>    company_2,Organi,True
+ <br/>    company_3,Boum,True</p>
+ <p>To create the CSV file for persons, linked to
+ companies, we will use the following SQL command in
+ PSQL:</p> <p>    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</p>
+ <p>It will produce the following CSV file:
+ <br/>    External ID,Name,Is a
+ Company,Related Company/External ID
+ <br/>    person_1,Fabien,False,company_1
+ <br/>    person_2,Laurence,False,company_1
+ <br/>    person_3,Eric,False,company_2
+ <br/>    person_4,Ramsy,False,company_3</p>
+ <p>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).</p>
+ <p>The two files produced are ready to be imported in
+ OpenERP 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.</p>
+ </dd>
+ </dl>
+
</div>
</form>
</t>
+
<t t-name="ImportView.preview">
<tr t-if="headers" class="oe_import_grid-header">
<td t-foreach="headers" t-as="header" class="oe_import_grid-cell"
<a href="#" class="oe_bold oe_list_button_import">Import</a>
</t>
</t>
- <t t-extend="KanbanView.buttons">
- <t t-jquery="span.oe_alternative" t-operation="after" t-if="widget.options.import_enabled">
- <span class="oe_alternative">
- <span class="oe_fade">or</span>
- <div class="oe_bounce_container">
- <a href="#" class="oe_bold oe_kanban_button_import">Import</a>
- </div>
- </span>
- </t>
- </t>
-
</templates>