00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 from PyQt4.QtCore import *
00029 from PyQt4.QtGui import *
00030 from PyQt4.uic import *
00031 from Koo import Rpc
00032 from Koo.Common import Common
00033 from Koo.Model.Group import RecordGroup
00034 from Koo.Screen.ViewQueue import *
00035
00036 (MassiveUpdateMessageBoxUi, MassiveUpdateMessageBoxBase) = loadUiType( Common.uiPath('massiveupdate_msgbox.ui') )
00037
00038 class MassiveUpdateMessageBoxDialog(QDialog, MassiveUpdateMessageBoxUi):
00039 def __init__(self, parent=None):
00040 QDialog.__init__(self, parent)
00041 MassiveUpdateMessageBoxUi.__init__(self)
00042 self.setupUi(self)
00043 self._fields = []
00044
00045 def setMessage(self, message):
00046 self.uiMessage.setText( message )
00047
00048 def setFields(self, fields):
00049 """
00050 fields = [(label, name)...]
00051 """
00052 self._fields = fields
00053 for field in self._fields:
00054 item = QListWidgetItem( self.uiFields )
00055 item.setText( field[0] )
00056 item.setSelected( True )
00057 self.uiFields.addItem( item )
00058
00059 def selectedFields(self):
00060 selected = []
00061 for x in xrange(self.uiFields.count()):
00062 item = self.uiFields.item(x)
00063 if item.isSelected():
00064 selected.append( self._fields[x][1] )
00065 return selected
00066
00067
00068 (MassiveUpdateDialogUi, MassiveUpdateDialogBase) = loadUiType( Common.uiPath('massiveupdate.ui') )
00069
00070 class MassiveUpdateDialog( QDialog, MassiveUpdateDialogUi ):
00071 def __init__( self, parent=None ):
00072 QDialog.__init__(self, parent)
00073 MassiveUpdateDialogUi.__init__(self)
00074 self.setupUi( self )
00075
00076 self.connect( self.pushAccept, SIGNAL('clicked()'), self.save )
00077
00078 self.ids = []
00079
00080 def setIds( self, ids ):
00081 self.ids = ids
00082
00083 def setModel(self, model):
00084 self.model = model
00085
00086 def setContext(self, context):
00087 self.context = context
00088
00089 def setup( self, viewTypes, viewIds ):
00090 self.group = RecordGroup( self.model, context=self.context )
00091 self.group.setDomainForEmptyGroup()
00092
00093 self.screen.setRecordGroup( self.group )
00094 self.screen.setEmbedded( True )
00095 if 'form' in viewTypes:
00096 queue = ViewQueue()
00097 queue.setup( viewTypes, viewIds )
00098 type = ''
00099 while type != 'form':
00100 id, type = queue.next()
00101 self.screen.setupViews( ['form'], [id] )
00102 else:
00103 self.screen.setupViews( ['form'], [False] )
00104 self.screen.new()
00105
00106 def save( self ):
00107 self.screen.currentView().store()
00108 record = self.screen.currentRecord()
00109 fields = []
00110 if record.isModified():
00111 values = record.get(get_readonly=False, get_modifiedonly=True)
00112 for field in values:
00113 attrs = record.fields()[ field ].attrs
00114 if 'string' in attrs:
00115 name = attrs['string']
00116 else:
00117 name = field
00118 fields.append( (name, field) )
00119
00120 fields.sort(key=lambda x: x[0])
00121
00122 if fields:
00123 messageBox = MassiveUpdateMessageBoxDialog(self)
00124 messageBox.setFields(fields)
00125 messageBox.setMessage( _('Select the fields you want to update in the <b>%d</b> selected records:') % len(self.ids) )
00126 if messageBox.exec_() == QDialog.Rejected:
00127 return
00128 newValues = {}
00129 for field in messageBox.selectedFields():
00130 newValues[field] = values[field]
00131 Rpc.session.execute('/object', 'execute', self.model, 'write', self.ids, newValues, self.context)
00132 self.accept()
00133