diff --git a/import_odbc/README.rst b/import_odbc/README.rst new file mode 100644 index 000000000..c0373815c --- /dev/null +++ b/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 `_. +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 `_. + + +Credits +======= + +Contributors +------------ + +* Daniel Reis +* Maxime Chambreuil + + +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. diff --git a/import_odbc/__init__.py b/import_odbc/__init__.py index 8b9967668..e93343be0 100644 --- a/import_odbc/__init__.py +++ b/import_odbc/__init__.py @@ -1,24 +1,3 @@ # -*- 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 . -# -############################################################################## from . import import_odbc - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/import_odbc/__openerp__.py b/import_odbc/__openerp__.py index a800cc8c5..4004aac3c 100644 --- a/import_odbc/__openerp__.py +++ b/import_odbc/__openerp__.py @@ -1,81 +1,11 @@ # -*- 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 . -# -############################################################################## +# 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.', - 'version': '1.3', + 'version': '8.0.0.1.3', '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 - """, 'author': "Daniel Reis,Odoo Community Association (OCA)", 'website': 'http://launchpad.net/addons-tko', 'license': 'AGPL-3', @@ -95,8 +25,6 @@ Contributors 'import_odbc_demo.xml', ], 'test': [], - 'installable': False, - 'active': False, + 'installable': True, + 'auto_install': False, } - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/import_odbc/import_odbc.py b/import_odbc/import_odbc.py index 22abfa4e8..ce8c84380 100644 --- a/import_odbc/import_odbc.py +++ b/import_odbc/import_odbc.py @@ -1,23 +1,6 @@ # -*- 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 . -# -############################################################################## +# Copyright (C) 2011 - TODAY Daniel Reis +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html import sys from datetime import datetime @@ -167,7 +150,7 @@ class import_odbc_dbtable(orm.Model): if obj.last_sync: sync = datetime.strptime(obj.last_sync, "%Y-%m-%d %H:%M:%S") else: - sync = datetime.datetime(1900, 1, 1, 0, 0, 0) + sync = datetime(1900, 1, 1, 0, 0, 0) params = {'sync': sync} res = db_model.execute(cr, uid, [obj.dbsource_id.id], obj.sql_source, params, metadata=True)