Browse Source

Merge pull request #463 from kmee/migration/import_odbc

[FIX] import odbc to new api
pull/769/head
Daniel Reis 8 years ago
committed by GitHub
parent
commit
54a5588336
  1. 96
      import_odbc/README.rst
  2. 21
      import_odbc/__init__.py
  3. 82
      import_odbc/__openerp__.py
  4. 23
      import_odbc/import_odbc.py

96
import_odbc/README.rst

@ -0,0 +1,96 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===========================================
Import data from SQL and ODBC data sources.
===========================================
This module allows import data directly from other databases.
Usage
=====
Go to: Administration module, menu Configuration -> Import from SQL.
Features:
* Fetched data from the databases are used to build lines equivalent to
regular import files. These are imported using the standard "import_data()"
ORM method, benefiting from all its features, including xml_ids.
* Each table import is defined by an SQL statement, used to build the
equivalent for an import file. Each column's name should match the column
names you would use in an import file. The first column must provide an
unique identifier for the record, and will be used to build its xml_id.
* SQL columns named "none" are ignored. This can be used for the first column
of the SQL, so that it's used to build the XML Id but it's not imported to
any OpenERP field.
* The last sync date is the last successfull execution can be used in the SQL
using "%(sync)s", or ":sync" in the case of Oracle.
* When errors are found, only the record with the error fails import. The
other correct records are commited. However, the "last sync date" will only
be automaticaly updated when no errors are found.
* The import execution can be scheduled to run automatically.
Examples:
* Importing suppliers to res.partner:
::
SELECT distinct[SUPPLIER_CODE] as "ref",
[SUPPLIER_NAME] as "name",
1 as "is_supplier",
[INFO] as "comment"
FROM T_SUPPLIERS
WHERE INACTIVE_DATE IS NULL and DATE_CHANGED >= %(sync)s'
* Importing products to product.product:
::
SELECT
PRODUCT_CODE as "ref",
PRODUCT_NAME as "name",
'res_partner_id_' + SUPPLIER_ID as "partner_id/id"
FROM T_PRODUCTS
WHERE DATE_CHANGED >= %(sync)s'
Known issues / Roadmap
======================
Improvements ideas waiting for a contributor:
* Allow to import many2one fields (currently not supported). Done by adding a
second SQL sentence to get child record list?
* Allow "import sets" that can be executed at different time intervals using
different scheduler jobs.
* Allow to inactivate/delete OpenERP records when not present in an SQL
result set.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/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
`here <https://github.com/OCA/server-tools/issues/new?body=module:%20import_odbc%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Daniel Reis <dreis.pt@gmail.com>
* Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

21
import_odbc/__init__.py

@ -1,24 +1,3 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# Daniel Reis
# 2011
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import import_odbc from . import import_odbc
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

82
import_odbc/__openerp__.py

@ -1,81 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# Daniel Reis
# 2011
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# Copyright (C) 2011 - TODAY Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{ {
'name': 'Import data from SQL and ODBC data sources.', 'name': 'Import data from SQL and ODBC data sources.',
'version': '1.3',
'version': '8.0.0.1.3',
'category': 'Tools', 'category': 'Tools',
'description': """
Import data directly from other databases.
Installed in the Administration module, menu Configuration -> Import from SQL.
Features:
* Fetched data from the databases are used to build lines equivalent to
regular import files. These are imported using the standard "import_data()"
ORM method, benefiting from all its features, including xml_ids.
* Each table import is defined by an SQL statement, used to build the
equivalent for an import file. Each column's name should match the column
names you would use in an import file. The first column must provide an
unique identifier for the record, and will be used to build its xml_id.
* SQL columns named "none" are ignored. This can be used for the first column
of the SQL, so that it's used to build the XML Id but it's not imported to
any OpenERP field.
* The last sync date is the last successfull execution can be used in the SQL
using "%(sync)s", or ":sync" in the case of Oracle.
* When errors are found, only the record with the error fails import. The
other correct records are commited. However, the "last sync date" will only
be automaticaly updated when no errors are found.
* The import execution can be scheduled to run automatically.
Examples:
* Importing suppliers to res.partner:
SELECT distinct
[SUPPLIER_CODE] as "ref"
, [SUPPLIER_NAME] as "name"
, 1 as "is_supplier"
, [INFO] as "comment"
FROM T_SUPPLIERS
WHERE INACTIVE_DATE IS NULL and DATE_CHANGED >= %(sync)s
* Importing products to product.product:
SELECT PRODUCT_CODE as "ref"
, PRODUCT_NAME as "name"
, 'res_partner_id_'+SUPPLIER_ID as "partner_id/id"
FROM T_PRODUCTS
WHERE DATE_CHANGED >= %(sync)s
Improvements ideas waiting for a contributor:
* Allow to import many2one fields (currently not supported). Done by adding a
second SQL sentence to get child record list?
* Allow "import sets" that can be executed at different time intervals using
different scheduler jobs.
* Allow to inactivate/delete OpenERP records when not present in an SQL
result set.
Contributors
============
* Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>
""",
'author': "Daniel Reis,Odoo Community Association (OCA)", 'author': "Daniel Reis,Odoo Community Association (OCA)",
'website': 'http://launchpad.net/addons-tko', 'website': 'http://launchpad.net/addons-tko',
'license': 'AGPL-3', 'license': 'AGPL-3',
@ -95,8 +25,6 @@ Contributors
'import_odbc_demo.xml', 'import_odbc_demo.xml',
], ],
'test': [], 'test': [],
'installable': False,
'active': False,
'installable': True,
'auto_install': False,
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

23
import_odbc/import_odbc.py

@ -1,23 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# Daniel Reis
# 2011
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# Copyright (C) 2011 - TODAY Daniel Reis
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
import sys import sys
from datetime import datetime from datetime import datetime
@ -167,7 +150,7 @@ class import_odbc_dbtable(orm.Model):
if obj.last_sync: if obj.last_sync:
sync = datetime.strptime(obj.last_sync, "%Y-%m-%d %H:%M:%S") sync = datetime.strptime(obj.last_sync, "%Y-%m-%d %H:%M:%S")
else: else:
sync = datetime.datetime(1900, 1, 1, 0, 0, 0)
sync = datetime(1900, 1, 1, 0, 0, 0)
params = {'sync': sync} params = {'sync': sync}
res = db_model.execute(cr, uid, [obj.dbsource_id.id], res = db_model.execute(cr, uid, [obj.dbsource_id.id],
obj.sql_source, params, metadata=True) obj.sql_source, params, metadata=True)

Loading…
Cancel
Save