Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
^pattern_import_export/|
^pattern_import_export_csv/|
^pattern_import_export_custom_header/|
^pattern_import_export_synchronize/|
^pattern_import_export_xlsx/|
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
Expand Down
33 changes: 25 additions & 8 deletions pattern_import_export/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
Pattern Import Export
=====================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3705d1bfe3c899c7c2037cad5305a0a6f080ddd8ca1d03bc732613a481115d2e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
Expand All @@ -14,10 +17,10 @@ Pattern Import Export
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-shopinvader%2Fpattern--import--export-lightgray.png?logo=github
:target: https://github.com/shopinvader/pattern-import-export/tree/14.0/pattern_import_export
:target: https://github.com/shopinvader/pattern-import-export/tree/16.0/pattern_import_export
:alt: shopinvader/pattern-import-export

|badge1| |badge2| |badge3|
|badge1| |badge2| |badge3|

Overview
~~~~~~~~
Expand Down Expand Up @@ -79,16 +82,29 @@ You have two options:

* Open the tree view of any model and tick some record selection boxes (for this step, these don't matter, we only just want to show the sidebar).
* In the sidebar, click on the "Import with Pattern" button
* Select the pattern that you used to generate the export, upload your file and click import.
* Select a pattern, upload your file and click import.
* A "Pattern file" is created, and its job along with it. Depending on the success or failure of the job, you
will receive a red/green notification on your window. You can check the details in the appropriate Import/Export menu.

Or:

* Access the Import wizard through the Import/Export menu
* Select the Pattern that you want to use
* Select a pattern
* Click on the "Import" button


Import syntax
-------------

One of the strength of pattern_import_export module is the ability to
reference records by natural keys (business keys) instead of technical keys (xmlid or database id).

One or more columns can be the natural key of the record to find and update or to create a new record.
Each column in the natural key has to be suffixed by "#key".

One or more columns can be used as foreign keys can be accessed with "|" syntax. (for instance on partner: country_id|code )


Example
-------

Expand Down Expand Up @@ -179,8 +195,8 @@ Bug Tracker

Bugs are tracked on `GitHub Issues <https://github.com/shopinvader/pattern-import-export/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/shopinvader/pattern-import-export/issues/new?body=module:%20pattern_import_export%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/shopinvader/pattern-import-export/issues/new?body=module:%20pattern_import_export%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand All @@ -199,10 +215,11 @@ Contributors
* Sébastien Beau <sebastien.beau@akretion.com>
* François Honoré (ACSONE SA/NV) <francois.honore@acsone.eu>
* Kevin Khao <kevin.khao@akretion.com>
* Raphaël Reverdy <raphael.reverdy@akretion.com>

Maintainers
~~~~~~~~~~~

This module is part of the `shopinvader/pattern-import-export <https://github.com/shopinvader/pattern-import-export/tree/14.0/pattern_import_export>`_ project on GitHub.
This module is part of the `shopinvader/pattern-import-export <https://github.com/shopinvader/pattern-import-export/tree/16.0/pattern_import_export>`_ project on GitHub.

You are welcome to contribute.
4 changes: 2 additions & 2 deletions pattern_import_export/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
"name": "Pattern Import Export",
"summary": "Pattern for import or export",
"version": "14.0.2.5.1",
"version": "16.0.1.0.0",
"category": "Extra Tools",
"author": "Akretion",
"website": "https://github.com/Shopinvader/pattern-import-export",
Expand All @@ -30,5 +30,5 @@
"data/queue_job_function_data.xml",
],
"demo": ["demo/demo.xml"],
"installable": False,
"installable": True,
}
203 changes: 101 additions & 102 deletions pattern_import_export/demo/demo.xml
Original file line number Diff line number Diff line change
@@ -1,108 +1,107 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- pylint:disable=dangerous-filter-wo-user -->
<!--TODO recheck repercussions of this-->
<odoo>
<data noupdate="1">
<!-- Filters -->
<record id="demo_filter_countries_1" model="ir.filters">
<field name="name">US, FR, BE</field>
<field name="domain">[("code", "in", ["US", "FR", "BE"])]</field>
<field name="model_id">res.country</field>
</record>
<record id="demo_filter_countries_2" model="ir.filters">
<field name="name">European countries</field>
<field
name="domain"
>[("code", "in", ["UK", "FR", "BE", "ES", "DE"])]</field>
<field name="model_id">res.country</field>
</record>
<record id="demo_filter_companies" model="ir.filters">
<field name="name">Ignore one</field>
<field name="domain">[("name", "!=", "Ignored company")]</field>
<field name="model_id">res.company</field>
</record>
<odoo noupdate="1">
<!-- Filters -->
<record id="demo_filter_countries_1" model="ir.filters">
<field name="name">US, FR, BE</field>
<field name="domain">[("code", "in", ["US", "FR", "BE"])]</field>
<field name="model_id">res.country</field>
<field name="user_id" />
</record>
<record id="demo_filter_countries_2" model="ir.filters">
<field name="name">European countries</field>
<field name="domain">[("code", "in", ["UK", "FR", "BE", "ES", "DE"])]</field>
<field name="model_id">res.country</field>
<field name="user_id" />
</record>
<record id="demo_filter_companies" model="ir.filters">
<field name="name">Ignore one</field>
<field name="domain">[("name", "!=", "Ignored company")]</field>
<field name="model_id">res.company</field>
<field name="user_id" />
</record>

<!--Exports-->
<record id="demo_export" model="ir.exports">
<field name="name">Partner</field>
<field name="resource">res.partner</field>
</record>
<record id="demo_export_m2m" model="ir.exports">
<field name="name">Users list - M2M</field>
<field name="resource">res.users</field>
</record>
<record id="demo_export_o2m" model="ir.exports">
<field name="name">Partner with contact</field>
<field name="resource">res.partner</field>
</record>
<record id="demo_pattern_config" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_pattern_config_m2m" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_pattern_config_o2m" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>
<!--Exports-->
<record id="demo_export" model="ir.exports">
<field name="name">Partner</field>
<field name="resource">res.partner</field>
</record>
<record id="demo_export_m2m" model="ir.exports">
<field name="name">Users list - M2M</field>
<field name="resource">res.users</field>
</record>
<record id="demo_export_o2m" model="ir.exports">
<field name="name">Partner with contact</field>
<field name="resource">res.partner</field>
</record>
<record id="demo_pattern_config" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_pattern_config_m2m" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_pattern_config_o2m" model="pattern.config">
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>

<!--Export lines-->
<record id="demo_export_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_3" model="ir.exports.line">
<field name="name">street</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_4" model="ir.exports.line">
<field name="name">country_id/code</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
<field name="tab_filter_id" ref="demo_filter_countries_1" />
<field name="add_select_tab" eval="True" />
</record>
<record id="demo_export_line_5" model="ir.exports.line">
<field name="name">category_id/name</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
<field name="add_select_tab" eval="True" />
</record>
<record id="demo_export_m2m_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_export_m2m_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_export_m2m_line_3" model="ir.exports.line">
<field name="name">company_ids/name</field>
<field name="number_occurence">1</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
<field name="add_select_tab" eval="True" />
<field name="tab_filter_id" ref="demo_filter_companies" />
</record>
<record id="demo_export_o2m_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>
<record id="demo_export_o2m_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>
<record id="demo_export_o2m_line_3" model="ir.exports.line">
<field name="name">child_ids</field>
<field name="number_occurence">3</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
<field name="sub_pattern_config_id" ref="demo_pattern_config" />
</record>
<record id="demo_export_o2m_line_4" model="ir.exports.line">
<field name="name">country_id/code</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
<field name="tab_filter_id" ref="demo_filter_countries_1" />
<field name="add_select_tab" eval="True" />
</record>
</data>
<!--Export lines-->
<record id="demo_export_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_3" model="ir.exports.line">
<field name="name">street</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
</record>
<record id="demo_export_line_4" model="ir.exports.line">
<field name="name">country_id/code</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
<field name="tab_filter_id" ref="demo_filter_countries_1" />
<field name="add_select_tab" eval="True" />
</record>
<record id="demo_export_line_5" model="ir.exports.line">
<field name="name">category_id/name</field>
<field name="export_id" ref="pattern_import_export.demo_export" />
<field name="add_select_tab" eval="True" />
</record>
<record id="demo_export_m2m_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_export_m2m_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
</record>
<record id="demo_export_m2m_line_3" model="ir.exports.line">
<field name="name">company_ids/name</field>
<field name="number_occurence">1</field>
<field name="export_id" ref="pattern_import_export.demo_export_m2m" />
<field name="add_select_tab" eval="True" />
<field name="tab_filter_id" ref="demo_filter_companies" />
</record>
<record id="demo_export_o2m_line_1" model="ir.exports.line">
<field name="name">id</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>
<record id="demo_export_o2m_line_2" model="ir.exports.line">
<field name="name">name</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
</record>
<record id="demo_export_o2m_line_3" model="ir.exports.line">
<field name="name">child_ids</field>
<field name="number_occurence">3</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
<field name="sub_pattern_config_id" ref="demo_pattern_config" />
</record>
<record id="demo_export_o2m_line_4" model="ir.exports.line">
<field name="name">country_id/code</field>
<field name="export_id" ref="pattern_import_export.demo_export_o2m" />
<field name="tab_filter_id" ref="demo_filter_countries_1" />
<field name="add_select_tab" eval="True" />
</record>
</odoo>
20 changes: 9 additions & 11 deletions pattern_import_export/migrations/12.0.4.0.0/post-migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ def migrate(env, version):
("export_format", "NULL"),
]:
if openupgrade.column_exists(env.cr, "ir_exports", field):
params[field] = '"{}"'.format(field)
params[field] = f'"{field}"'
else:
params[field] = default_value

env.cr.execute(
"""
f"""
INSERT INTO pattern_config (
use_description,
pattern_file,
Expand All @@ -34,17 +34,15 @@ def migrate(env, version):
)
SELECT
use_description,
{p[pattern_file]},
{p[pattern_file_name]},
{p[pattern_last_generation_date]},
{p[export_format]},
{p[partial_commit]},
{p[flush_step]},
{params["pattern_file"]},
{params["pattern_file_name"]},
{params["pattern_last_generation_date"]},
{params["export_format"]},
{params["partial_commit"]},
{params["flush_step"]},
id
FROM ir_exports WHERE is_pattern IS TRUE
""".format(
p=params
)
"""
)

env.cr.execute(
Expand Down
Loading