2013-04-22 17:04:29 +00:00
#########################################################################
2010-09-18 07:24:46 +00:00
#
2013-04-22 17:04:29 +00:00
# Copyright (c) 2003-2004 Danny Brewer d29583@groovegarden.com
# Copyright (C) 2004-2010 OpenERP SA (<http://openerp.com>).
2010-09-18 07:24:46 +00:00
#
2013-04-22 17:04:29 +00:00
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
2010-09-18 07:24:46 +00:00
#
2013-04-22 17:04:29 +00:00
# This library 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
# Lesser General Public License for more details.
2012-08-06 16:28:17 +00:00
#
2013-04-22 17:04:29 +00:00
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2012-08-06 16:28:17 +00:00
#
2013-04-22 17:04:29 +00:00
# See: http://www.gnu.org/licenses/lgpl.html
2012-08-06 16:28:17 +00:00
#
2013-04-22 17:04:29 +00:00
#############################################################################
2010-09-18 07:24:46 +00:00
import uno
import string
import unohelper
import xmlrpclib
from com . sun . star . task import XJobExecutor
if __name__ < > " package " :
from lib . gui import *
from lib . functions import *
from lib . error import ErrorDialog
from LoginTest import *
from lib . rpc import *
database = " test_001 "
uid = 3
class AddLang ( unohelper . Base , XJobExecutor ) :
2012-03-05 18:40:03 +00:00
def __init__ ( self , sVariable = " " , sFields = " " , sDisplayName = " " , bFromModify = False ) :
2010-09-18 07:24:46 +00:00
LoginTest ( )
if not loginstatus and __name__ == " package " :
exit ( 1 )
global passwd
self . password = passwd
self . win = DBModalDialog ( 60 , 50 , 180 , 225 , " Set Lang Builder " )
self . win . addFixedText ( " lblVariable " , 27 , 12 , 60 , 15 , " Variable : " )
self . win . addComboBox ( " cmbVariable " , 180 - 120 - 2 , 10 , 120 , 15 , True ,
itemListenerProc = self . cmbVariable_selected )
self . insVariable = self . win . getControl ( " cmbVariable " )
self . win . addFixedText ( " lblFields " , 10 , 32 , 60 , 15 , " Variable Fields : " )
self . win . addComboListBox ( " lstFields " , 180 - 120 - 2 , 30 , 120 , 150 , False , itemListenerProc = self . lstbox_selected )
self . insField = self . win . getControl ( " lstFields " )
self . win . addFixedText ( " lblUName " , 8 , 187 , 60 , 15 , " Displayed name : " )
self . win . addEdit ( " txtUName " , 180 - 120 - 2 , 185 , 120 , 15 , )
self . win . addButton ( ' btnOK ' , - 5 , - 5 , 45 , 15 , ' Ok ' , actionListenerProc = self . btnOk_clicked )
self . win . addButton ( ' btnCancel ' , - 5 - 45 - 5 , - 5 , 45 , 15 , ' Cancel ' , actionListenerProc = self . btnCancel_clicked )
self . sValue = None
self . sObj = None
self . aSectionList = [ ]
self . sGDisplayName = sDisplayName
self . aItemList = [ ]
self . aComponentAdd = [ ]
self . aObjectList = [ ]
self . aListFields = [ ]
self . aVariableList = [ ]
EnumDocument ( self . aItemList , self . aComponentAdd )
desktop = getDesktop ( )
doc = desktop . getCurrentComponent ( )
docinfo = doc . getDocumentInfo ( )
self . sMyHost = " "
global url
self . sock = RPCSession ( url )
if not docinfo . getUserFieldValue ( 3 ) == " " and not docinfo . getUserFieldValue ( 0 ) == " " :
self . sMyHost = docinfo . getUserFieldValue ( 0 )
self . count = 0
oParEnum = doc . getTextFields ( ) . createEnumeration ( )
while oParEnum . hasMoreElements ( ) :
oPar = oParEnum . nextElement ( )
if oPar . supportsService ( " com.sun.star.text.TextField.DropDown " ) :
self . count + = 1
getList ( self . aObjectList , self . sMyHost , self . count )
cursor = doc . getCurrentController ( ) . getViewCursor ( )
text = cursor . getText ( )
tcur = text . createTextCursorByRange ( cursor )
2013-03-04 17:31:32 +00:00
self . aVariableList . extend ( filter ( lambda obj : obj [ : obj . find ( " ( " ) ] == " Objects " , self . aObjectList ) )
2010-09-18 07:24:46 +00:00
for i in range ( len ( self . aItemList ) ) :
2013-03-04 17:31:32 +00:00
anItem = self . aItemList [ i ] [ 1 ]
component = self . aComponentAdd [ i ]
2010-09-18 07:24:46 +00:00
if component == " Document " :
2013-03-04 17:31:32 +00:00
sLVal = anItem [ anItem . find ( " , ' " ) + 2 : anItem . find ( " ' ) " ) ]
self . aVariableList . extend ( filter ( lambda obj : obj [ : obj . find ( " ( " ) ] == sLVal , self . aObjectList ) )
2010-09-18 07:24:46 +00:00
if tcur . TextSection :
getRecersiveSection ( tcur . TextSection , self . aSectionList )
if component in self . aSectionList :
2013-03-04 17:31:32 +00:00
sLVal = anItem [ anItem . find ( " , ' " ) + 2 : anItem . find ( " ' ) " ) ]
self . aVariableList . extend ( filter ( lambda obj : obj [ : obj . find ( " ( " ) ] == sLVal , self . aObjectList ) )
2010-09-18 07:24:46 +00:00
if tcur . TextTable :
2013-03-04 17:31:32 +00:00
if not component == " Document " and component [ component . rfind ( " . " ) + 1 : ] == tcur . TextTable . Name :
2010-09-18 07:24:46 +00:00
VariableScope ( tcur , self . insVariable , self . aObjectList , self . aComponentAdd , self . aItemList , component )
self . bModify = bFromModify
if self . bModify == True :
sItem = " "
2013-03-04 17:31:32 +00:00
for anObject in self . aObjectList :
if anObject [ : anObject . find ( " ( " ) ] == sVariable :
sItem = anObject
self . insVariable . setText ( sItem )
genTree ( sItem [ sItem . find ( " ( " ) + 1 : sItem . find ( " ) " ) ] , self . aListFields , self . insField , self . sMyHost , 2 , ending_excl = [ ' one2many ' , ' many2one ' , ' many2many ' , ' reference ' ] , recur = [ ' many2one ' ] )
2010-09-18 07:24:46 +00:00
self . sValue = self . win . getListBoxItem ( " lstFields " , self . aListFields . index ( sFields ) )
for var in self . aVariableList :
2013-03-04 17:31:32 +00:00
self . model_ids = self . sock . execute ( database , uid , self . password , ' ir.model ' , ' search ' , [ ( ' model ' , ' = ' , var [ var . find ( " ( " ) + 1 : var . find ( " ) " ) ] ) ] )
2010-09-18 07:24:46 +00:00
fields = [ ' name ' , ' model ' ]
self . model_res = self . sock . execute ( database , uid , self . password , ' ir.model ' , ' read ' , self . model_ids , fields )
if self . model_res < > [ ] :
2013-03-04 17:31:32 +00:00
self . insVariable . addItem ( var [ : var . find ( " ( " ) + 1 ] + self . model_res [ 0 ] [ ' name ' ] + " ) " , self . insVariable . getItemCount ( ) )
2010-09-18 07:24:46 +00:00
else :
self . insVariable . addItem ( var , self . insVariable . getItemCount ( ) )
self . win . doModalDialog ( " lstFields " , self . sValue )
else :
2012-07-20 09:26:53 +00:00
ErrorDialog ( " Please insert user define field Field-1 or Field-4 " , " Just go to File->Properties->User Define \n Field-1 E.g. http://localhost:8069 \n OR \n Field-4 E.g. account.invoice " )
2010-09-18 07:24:46 +00:00
self . win . endExecute ( )
2012-03-05 18:40:03 +00:00
def lstbox_selected ( self , oItemEvent ) :
2010-09-18 07:24:46 +00:00
try :
desktop = getDesktop ( )
doc = desktop . getCurrentComponent ( )
docinfo = doc . getDocumentInfo ( )
sItem = self . win . getComboBoxText ( " cmbVariable " )
for var in self . aVariableList :
2013-03-04 17:31:32 +00:00
if var [ : var . find ( " ( " ) + 1 ] == sItem [ : sItem . find ( " ( " ) + 1 ] :
2010-09-18 07:24:46 +00:00
sItem = var
sMain = self . aListFields [ self . win . getListBoxSelectedItemPos ( " lstFields " ) ]
t = sMain . rfind ( ' /lang ' )
if t != - 1 :
2013-03-04 17:31:32 +00:00
sObject = self . getRes ( self . sock , sItem [ sItem . find ( " ( " ) + 1 : - 1 ] , sMain [ 1 : ] )
2010-09-18 07:24:46 +00:00
ids = self . sock . execute ( database , uid , self . password , sObject , ' search ' , [ ] )
res = self . sock . execute ( database , uid , self . password , sObject , ' read ' , [ ids [ 0 ] ] )
2013-03-04 17:31:32 +00:00
self . win . setEditText ( " txtUName " , res [ 0 ] [ sMain [ sMain . rfind ( " / " ) + 1 : ] ] )
2010-09-18 07:24:46 +00:00
else :
2012-08-06 16:28:17 +00:00
ErrorDialog ( " Please select a language. " )
2010-09-18 07:24:46 +00:00
except :
import traceback ; traceback . print_exc ( )
self . win . setEditText ( " txtUName " , " TTT " )
if self . bModify :
self . win . setEditText ( " txtUName " , self . sGDisplayName )
2012-03-05 18:40:03 +00:00
def getRes ( self , sock , sObject , sVar ) :
2010-09-18 07:24:46 +00:00
desktop = getDesktop ( )
doc = desktop . getCurrentComponent ( )
docinfo = doc . getDocumentInfo ( )
res = sock . execute ( database , uid , self . password , sObject , ' fields_get ' )
key = res . keys ( )
key . sort ( )
myval = None
if not sVar . find ( " / " ) == - 1 :
2013-03-04 17:31:32 +00:00
myval = sVar [ : sVar . find ( " / " ) ]
2010-09-18 07:24:46 +00:00
else :
myval = sVar
if myval in key :
if ( res [ myval ] [ ' type ' ] in [ ' many2one ' ] ) :
sObject = res [ myval ] [ ' relation ' ]
2013-03-04 17:31:32 +00:00
return self . getRes ( sock , res [ myval ] [ ' relation ' ] , sVar [ sVar . find ( " / " ) + 1 : ] )
2010-09-18 07:24:46 +00:00
else :
return sObject
2012-03-05 18:40:03 +00:00
def cmbVariable_selected ( self , oItemEvent ) :
2010-09-18 07:24:46 +00:00
if self . count > 0 :
try :
desktop = getDesktop ( )
doc = desktop . getCurrentComponent ( )
docinfo = doc . getDocumentInfo ( )
self . win . removeListBoxItems ( " lstFields " , 0 , self . win . getListBoxItemCount ( " lstFields " ) )
self . aListFields = [ ]
tempItem = self . win . getComboBoxText ( " cmbVariable " )
for var in self . aVariableList :
2013-03-04 17:31:32 +00:00
if var [ : var . find ( " ( " ) ] == tempItem [ : tempItem . find ( " ( " ) ] :
2010-09-18 07:24:46 +00:00
sItem = var
2013-03-04 17:31:32 +00:00
genTree (
sItem [ sItem . find ( " ( " ) + 1 : sItem . find ( " ) " ) ] ,
self . aListFields ,
self . insField ,
self . sMyHost ,
2 ,
ending_excl = [ ' one2many ' , ' many2one ' , ' many2many ' , ' reference ' ] ,
recur = [ ' many2one ' ]
)
2010-09-18 07:24:46 +00:00
except :
import traceback ; traceback . print_exc ( )
2012-03-05 18:40:03 +00:00
def btnOk_clicked ( self , oActionEvent ) :
2010-09-18 07:24:46 +00:00
self . bOkay = True
desktop = getDesktop ( )
doc = desktop . getCurrentComponent ( )
cursor = doc . getCurrentController ( ) . getViewCursor ( )
itemSelected = self . win . getListBoxSelectedItem ( " lstFields " )
itemSelectedPos = self . win . getListBoxSelectedItemPos ( " lstFields " )
txtUName = self . win . getEditText ( " txtUName " )
sKey = u " " + txtUName
if itemSelected != " " and txtUName != " " and self . bModify == True :
oCurObj = cursor . TextField
sObjName = self . insVariable . getText ( )
sObjName = sObjName [ : sObjName . find ( " ( " ) ]
sValue = u " [[ setLang " + sObjName + self . aListFields [ itemSelectedPos ] . replace ( " / " , " . " ) + " ) " " ]] "
oCurObj . Items = ( sKey , sValue )
oCurObj . update ( )
self . win . endExecute ( )
elif itemSelected != " " and txtUName != " " :
oInputList = doc . createInstance ( " com.sun.star.text.TextField.DropDown " )
sObjName = self . win . getComboBoxText ( " cmbVariable " )
sObjName = sObjName [ : sObjName . find ( " ( " ) ]
widget = ( cursor . TextTable and cursor . TextTable . getCellByName ( cursor . Cell . CellName ) or doc . Text )
sValue = u " [[setLang " + " ( " + sObjName + self . aListFields [ itemSelectedPos ] . replace ( " / " , " . " ) + " ) " " ]] "
oInputList . Items = ( sKey , sValue )
widget . insertTextContent ( cursor , oInputList , False )
self . win . endExecute ( )
else :
2012-08-06 16:28:17 +00:00
ErrorDialog ( " Please fill appropriate data in name field \n or select particular value from the list of fields. " )
2010-09-18 07:24:46 +00:00
2012-03-05 18:40:03 +00:00
def btnCancel_clicked ( self , oActionEvent ) :
2010-09-18 07:24:46 +00:00
self . win . endExecute ( )
if __name__ < > " package " and __name__ == " __main__ " :
AddLang ( )
elif __name__ == " package " :
g_ImplementationHelper . addImplementation ( AddLang , " org.openoffice.openerp.report.langtag " , ( " com.sun.star.task.Job " , ) , )
2011-11-22 08:51:38 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: