2006-12-07 13:41:40 +00:00
##############################################################################
#
2008-06-16 11:00:21 +00:00
# Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
#
# $Id$
2006-12-07 13:41:40 +00:00
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
__author__ = ' Gaetan de Menten, <ged@tiny.be> '
__version__ = ' 0.1.0 '
import psycopg
import optparse
import ConfigParser
# -----
parser = optparse . OptionParser ( version = " Tiny ERP server migration script " + __version__ )
parser . add_option ( " -c " , " --config " , dest = " config " , help = " specify path to Tiny ERP config file " )
group = optparse . OptionGroup ( parser , " Database related options " )
group . add_option ( " --db_host " , dest = " db_host " , help = " specify the database host " )
group . add_option ( " --db_port " , dest = " db_port " , help = " specify the database port " )
group . add_option ( " -d " , " --database " , dest = " db_name " , help = " specify the database name " )
group . add_option ( " -r " , " --db_user " , dest = " db_user " , help = " specify the database user name " )
group . add_option ( " -w " , " --db_password " , dest = " db_password " , help = " specify the database password " )
parser . add_option_group ( group )
options = optparse . Values ( )
options . db_name = ' terp ' # default value
parser . parse_args ( values = options )
if hasattr ( options , ' config ' ) :
2008-07-22 14:24:36 +00:00
configparser = ConfigParser . ConfigParser ( )
configparser . read ( [ options . config ] )
for name , value in configparser . items ( ' options ' ) :
if not ( hasattr ( options , name ) and getattr ( options , name ) ) :
if value in ( ' true ' , ' True ' ) :
value = True
if value in ( ' false ' , ' False ' ) :
value = False
setattr ( options , name , value )
2006-12-07 13:41:40 +00:00
# -----
host = hasattr ( options , ' db_host ' ) and " host= %s " % options . db_host or ' '
port = hasattr ( options , ' db_port ' ) and " port= %s " % options . db_port or ' '
name = " dbname= %s " % options . db_name
user = hasattr ( options , ' db_user ' ) and " user= %s " % options . db_user or ' '
password = hasattr ( options , ' db_password ' ) and " password= %s " % options . db_password or ' '
db = psycopg . connect ( ' %s %s %s %s %s ' % ( host , port , name , user , password ) , serialize = 0 )
cr = db . cursor ( )
# ------------------------- #
# change some columns types #
# ------------------------- #
def change_column ( cr , table , column , new_type , copy ) :
2008-07-22 14:24:36 +00:00
commands = [
" ALTER TABLE %s RENAME COLUMN %s TO temp_column " % ( table , column ) ,
" ALTER TABLE %s ADD COLUMN %s %s " % ( table , column , new_type ) ,
" ALTER TABLE %s DROP COLUMN temp_column " % table
]
if copy :
commands . insert (
2 ,
" UPDATE %s SET %s =temp_column:: %s " % ( table , column , new_type ) )
for command in commands :
cr . execute ( command )
2006-12-07 13:41:40 +00:00
change_column ( cr , ' crm_case ' , ' date_closed ' , ' timestamp ' , True )
cr . commit ( )
2006-12-22 09:13:15 +00:00
# -------------------- #
# add module if needed #
# -------------------- #
cr . execute ( " SELECT name FROM ir_module_module " )
if not cr . rowcount :
2008-07-22 14:24:36 +00:00
for module in ( ' base ' , ' marketing ' , ' subscription ' , ' account ' , ' base_partner_relation ' , ' audittrail ' , ' account_followup ' , ' product ' , ' hr ' , ' l10n_simple ' , ' crm ' , ' stock ' , ' hr_timesheet ' , ' purchase ' , ' report_purchase ' , ' mrp ' , ' sale ' , ' report_sale ' , ' delivery ' , ' project ' , ' sale_crm ' , ' hr_timesheet_project ' , ' scrum ' , ' report_project ' ) :
cr . execute ( " INSERT INTO ir_module_module (name, state) VALUES ( ' %s ' , ' installed ' ) " % module )
cr . commit ( )
2006-12-22 09:13:15 +00:00
2007-02-07 15:44:53 +00:00
# --------------- #
# remove old menu #
# --------------- #
while True :
2008-07-22 14:24:36 +00:00
cr . execute ( " select id from ir_ui_menu where id not in (select parent_id from ir_ui_menu where parent_id is not null) and id not in (select res_id from ir_model_data where model= ' ir.ui.menu ' ) " )
if not cr . rowcount :
break
cr . execute ( " delete from ir_ui_menu where id not in (select parent_id from ir_ui_menu where parent_id is not null) and id not in (select res_id from ir_model_data where model= ' ir.ui.menu ' ) " )
2007-02-07 15:44:53 +00:00
cr . commit ( )
2006-12-22 09:13:15 +00:00
2006-12-11 11:47:20 +00:00
# ----------------------------------------------------- #
# add some fields (which cannot be added automatically) #
# ----------------------------------------------------- #
for line in (
2008-07-22 14:24:36 +00:00
" ALTER TABLE ir_module_module ADD demo BOOLEAN " ,
" ALTER TABLE ir_module_module SET demo DEFAULT False " ,
" DELETE FROM ir_values WHERE VALUE LIKE ' % ,False ' " ,
""" UPDATE ir_ui_view set arch= ' <?xml version= " 1.0 " ?><tree string= " Menu " toolbar= " 1 " ><field icon= " icon " name= " name " /></tree> ' where name= ' ir.ui.menu.tree ' and type= ' tree ' and field_parent= ' child_id ' """ ,
) :
cr . execute ( line )
2006-12-11 11:47:20 +00:00
2006-12-14 16:00:46 +00:00
cr . commit ( )
2006-12-07 13:41:40 +00:00
cr . close ( )