diff --git a/addons/olap_extract/__init__.py b/addons/olap_extract/__init__.py new file mode 100755 index 00000000000..8ec082d25fb --- /dev/null +++ b/addons/olap_extract/__init__.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import olap_extract +import wizard_olap_extract \ No newline at end of file diff --git a/addons/olap_extract/__terp__.py b/addons/olap_extract/__terp__.py new file mode 100644 index 00000000000..6e44d5e7e43 --- /dev/null +++ b/addons/olap_extract/__terp__.py @@ -0,0 +1,37 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +{ + "name" : "Module to extracts the schema structure", + "version" : "0.1", + "author" : "Tiny", + "website" : "http://www.openerp.com", + "depends" : ["olap"], + "category" : "Generic Modules/Olap", + "description": """ + Extracts the schema structure. + """, + "init_xml" : [], + "update_xml" : ["olap_extract_wizard.xml"], + "demo_xml" : [], + "active": False, + "installable": True +} diff --git a/addons/olap_extract/i18n/fr_BE.po b/addons/olap_extract/i18n/fr_BE.po new file mode 100644 index 00000000000..92f455fcebd --- /dev/null +++ b/addons/olap_extract/i18n/fr_BE.po @@ -0,0 +1,54 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * olap_extract +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-26 05:29:21+0000\n" +"PO-Revision-Date: 2009-11-26 05:29:21+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: olap_extract +#: model:ir.module.module,shortdesc:olap_extract.module_meta_information +msgid "olap_extract" +msgstr "" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,ok:0 +msgid "OK" +msgstr "" + +#. module: olap_extract +#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema +msgid "Olap Extract" +msgstr "" + +#. module: olap_extract +#: model:ir.module.module,description:olap_extract.module_meta_information +msgid "\n" +" Extracts the schema structure.\n" +" " +msgstr "" + +#. module: olap_extract +#: wizard_field:olap.extract.schema,init,module_name:0 +msgid "Module Name" +msgstr "" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,end:0 +msgid "Cancel" +msgstr "" + +#. module: olap_extract +#: wizard_view:olap.extract.schema,init:0 +msgid "New Module Name" +msgstr "" + diff --git a/addons/olap_extract/i18n/olap_extract.pot b/addons/olap_extract/i18n/olap_extract.pot new file mode 100644 index 00000000000..92f455fcebd --- /dev/null +++ b/addons/olap_extract/i18n/olap_extract.pot @@ -0,0 +1,54 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * olap_extract +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-26 05:29:21+0000\n" +"PO-Revision-Date: 2009-11-26 05:29:21+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: olap_extract +#: model:ir.module.module,shortdesc:olap_extract.module_meta_information +msgid "olap_extract" +msgstr "" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,ok:0 +msgid "OK" +msgstr "" + +#. module: olap_extract +#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema +msgid "Olap Extract" +msgstr "" + +#. module: olap_extract +#: model:ir.module.module,description:olap_extract.module_meta_information +msgid "\n" +" Extracts the schema structure.\n" +" " +msgstr "" + +#. module: olap_extract +#: wizard_field:olap.extract.schema,init,module_name:0 +msgid "Module Name" +msgstr "" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,end:0 +msgid "Cancel" +msgstr "" + +#. module: olap_extract +#: wizard_view:olap.extract.schema,init:0 +msgid "New Module Name" +msgstr "" + diff --git a/addons/olap_extract/olap_extract_wizard.xml b/addons/olap_extract/olap_extract_wizard.xml new file mode 100755 index 00000000000..7de48f3c7ac --- /dev/null +++ b/addons/olap_extract/olap_extract_wizard.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/addons/olap_extract/wizard_olap_extract.py b/addons/olap_extract/wizard_olap_extract.py new file mode 100755 index 00000000000..e71d2cb7fe6 --- /dev/null +++ b/addons/olap_extract/wizard_olap_extract.py @@ -0,0 +1,249 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# 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 . +# +############################################################################## + +import wizard +import pooler +import csv +import os +import time +import netsvc +import zipfile + + +form1 = ''' +
+ +''' + +field1 = { + 'module_name': {'string':'Module Name', 'type':'char','size':'64', 'required':True}, +} + + +class wizard_olap_extract(wizard.interface): + + def zipper(self,zipname,filename,mode="a"): + z = zipfile.ZipFile(zipname+".zip", mode) + z.write(filename) + print "\n",z.printdir() + + + def write_csv(self,filename,content=[]): + fid = open(filename, 'w') + if fid == -1: + print 'File: temp.csv not found or could not be opened' + return False + else: + writer=csv.writer(fid, 'TINY',delimiter=',') + for row in content: + writer.writerow(row) + fid.close + return True + + def table_depth(self,cr,uid,list=[],context={}): + + res={} + templeft={} + tempright={} + for table_id in list: + lines=pooler.get_pool(cr.dbname).get('olap.cube.table').browse(cr, uid,table_id,context) + res[str(lines.id)] = ["cubetable_"+str(lines.id),lines.name and lines.name or '',lines.table_alias and lines.table_alias or '',lines.key_left and lines.key_left or '',lines.key_right and lines.key_right or '',lines.table_left_id.id and "cubetable_"+str(lines.table_left_id.id) or '',lines.table_right_id.id and "cubetable_"+str(lines.table_right_id.id) or ''] + if(lines.table_left_id.id): + templeft = self.table_depth(cr,uid,[lines.table_left_id.id],context) + + if templeft: + for temp in templeft: + if not res.has_key(temp): + res[temp]= templeft[temp] + + + if(lines.table_right_id.id): + tempright = self.table_depth(cr,uid,[lines.table_right_id.id],context) + + if tempright: + for temp in tempright: + if not res.has_key(temp): + res[temp]= tempright[temp] + return res + + + def _extract_schema(self, cr, uid, data, context={}): + + _name = data['form']['module_name'] + _modulename = "olap_"+_name + + dirname = _modulename + if not os.path.isdir("./addons/" + dirname + "/"): + os.mkdir("./addons/" + dirname + "/") + + os.chdir("./addons/"+dirname) + + _init = "import %s" % _modulename + f = open("__init__.py","w") + f.write(_init) + f.close() + self.zipper(_modulename, "__init__.py","w") + + _init_files = { + "1":"olap.fact.database.csv", + "2":"olap.schema.csv", + "5":"olap.cube.table.csv", + "6":"olap.cube.csv", + "7":"olap.dimension.csv", + "8":"olap.hierarchy.csv", + "9":"olap.level.csv", + "10":"olap.measure.csv" + } + _init_xml = """"%(1)s", + "%(2)s", + "%(5)s", + "%(6)s", + "%(7)s", + "%(8)s", + "%(9)s", + "%(10)s", + """ % _init_files + + data['modulename'] = _modulename + data['init_xml'] = _init_xml + + _terp= """{ + "name" : "%(modulename)s", + "version" : "0.1", + "author" : "Tiny", + "website" : "http://tinyerp.com/", + "depends" : ["olap"], + "category" : "Generic Modules/Others", + "description": "Module will load the data in olap tables", + "init_xml" :[ + %(init_xml)s + ], + "update_xml" : [], + "demo_xml" : [], + "active": False, + "installable": True + }"""%data + + f = open("__terp__.py","w") + f.write(_terp) + f.close() + self.zipper(_modulename, "__terp__.py") + + + schema_id = data['id'] + + lines=pooler.get_pool(cr.dbname).get('olap.schema').browse(cr, uid, schema_id,context) + + _extract=[] + _extract.append(['id','name','db_name','db_login','db_password']) + _extract.append(["db_"+str(lines.database_id.id),lines.database_id.name,lines.database_id.db_name,lines.database_id.db_login,lines.database_id.db_password]) + self.write_csv('olap.fact.database.csv',_extract) + self.zipper(_modulename, "olap.fact.database.csv") + + _extract=[] + _extract.append(['id','name','database_id:id','loaded','configure','ready','state','note']) + _extract.append(["schema_"+str(lines.id),lines.name,"db_"+str(lines.database_id.id),lines.loaded and lines.loaded or '',lines.configure and lines.configure or '', lines.ready and lines.ready or '',lines.state,lines.note and lines.note or '']) + self.write_csv('olap.schema.csv',_extract) + self.zipper(_modulename, "olap.schema.csv") + + cube_ids = lines.cube_ids + _extractcubes=[] + _extractcubes.append(['id','name','table_id:id','schema_id:id']) + + _extractmeasures=[] + _extractmeasures.append(['id','name','cube_id:id','value_column','value_sql','agregator','datatype','formatstring']) + + _extractdimension=[] + _extractdimension.append(['id','name','foreign_key','foreign_key_table','cube_id:id']) + + _extracthiers=[] + _extracthiers.append(['id','name','primary_key','primary_key_table','field_name','member_all','member_default','sequence','type','dimension_id:id','table_id:id']) + + _extractlevels=[] + _extractlevels.append(['id','name','column_name','column_id_name','type','table_name','sequence','hierarchy_id:id']) + + _cube_table_ids = [] + for cube in cube_ids: + _extractcubes.append(["cube_"+str(cube.id),cube.name,"cubetable_"+str(cube.table_id.id),"schema_"+str(cube.schema_id.id)]) + _cube_table_ids.append(cube.table_id.id) + + measure_ids = cube.measure_ids + for measure in measure_ids: + _extractmeasures.append(["msr_"+str(measure.id),measure.name,"cube_"+str(measure.cube_id.id),measure.value_column and measure.value_column or '',measure.value_sql and measure.value_sql or '',measure.agregator,measure.datatype and measure.datatype or '',measure.formatstring]) + + dimension_ids = cube.dimension_ids + for dimension in dimension_ids: + _extractdimension.append(["dim_"+str(dimension.id),dimension.name,dimension.foreign_key and dimension.foreign_key or '',dimension.foreign_key_table and dimension.foreign_key_table or '',"cube_"+str(dimension.cube_id.id)]) + + hiers_ids = dimension.hierarchy_ids + for hier in hiers_ids: + _extracthiers.append(["hier_"+str(hier.id),hier.name,hier.primary_key,hier.primary_key_table and hier.primary_key_table or '',hier.field_name,hier.member_all,hier.member_default,hier.sequence,hier.type,"dim_"+str(hier.dimension_id.id),"cubetable_"+str(hier.table_id.id)]) + _cube_table_ids.append(hier.table_id.id) + + level_ids = hier.level_ids + for level in level_ids: + _extractlevels.append(["lvl_"+str(level.id),level.name,level.column_name,level.column_id_name,level.type,level.table_name,level.sequence,"hier_"+str(level.hierarchy_id.id)]) + + res={} + _extract=[] + _extract.append(['id','name','table_alias','key_left','key_right','table_left_id:id','table_right_id:id']) + res = self.table_depth(cr,uid,_cube_table_ids,context) + key = res.keys() + key = map(lambda x: int(x),key) + key.sort() + + for k in key: + _extract.append(res[str(k)]) + + self.write_csv('olap.cube.csv',_extractcubes) + self.zipper(_modulename, "olap.cube.csv") + + self.write_csv('olap.measure.csv',_extractmeasures) + self.zipper(_modulename, "olap.measure.csv") + + self.write_csv('olap.dimension.csv',_extractdimension) + self.zipper(_modulename, "olap.dimension.csv") + + self.write_csv('olap.hierarchy.csv',_extracthiers) + self.zipper(_modulename, "olap.hierarchy.csv") + + self.write_csv('olap.level.csv',_extractlevels) + self.zipper(_modulename, "olap.level.csv") + + self.write_csv('olap.cube.table.csv',_extract) + self.zipper(_modulename, "olap.cube.table.csv") + + return {} + + states = { + + 'init': { + 'actions': [], + 'result': {'type':'form','arch':form1, 'fields':field1, 'state':[('end','Cancel'),('ok','OK')]} + }, + + 'ok' : { + 'actions' : [], + 'result' : {'type' : 'action' ,'action':_extract_schema,'state':'end'} + } + } + +wizard_olap_extract('olap.extract.schema')