def batchButton(self): viewTypes = self.viewTypes viewIds = self.viewIds group = RecordGroup(self.model, context=self.context) group.setDomainForEmptyGroup() group.load(self.screen.selectedIds()) screen = Screen(self) screen.setRecordGroup(self.group) screen.setEmbedded(True) if 'form' in viewTypes: queue = ViewQueue() queue.setup(viewTypes, viewIds) type = '' while type != 'form': ident, type = next(queue) screen.setupViews(['form'], [ident]) else: screen.setupViews(['form'], [False]) from Koo.Fields.Button import ButtonFieldWidget from Koo.Common import Common buttons = {} for key, widget in screen.currentView().widgets.items(): if isinstance(widget, ButtonFieldWidget): buttons[str(widget.button.text())] = widget.name selectionDialog = Common.SelectionDialog( _('Choose action to apply to selected records'), buttons, self) if selectionDialog.exec_() == QDialog.Rejected: return buttonString = selectionDialog.result[0] buttonName = selectionDialog.result[1] if QMessageBox.question( self, _("Batch Update"), _("Do you really want to push button '%s' of all selected records?") % buttonString, QMessageBox.Yes|QMessageBox.No ) == 1: return for ident in self.screen.selectedIds(): screen.display(ident) screen.currentView().widgets[buttonName].executeButton(screen, ident) self.reload()
def setup(self): fields = Rpc.session.execute('/object', 'execute', self.model, 'fields_view_get', False, 'form', Rpc.session.context) fields = fields['fields'] if self.availableFields: for field in list(fields.keys()): if not field in self.availableFields: del fields[field] oneToManyFields = [(fields[field]['string'], field) for field in fields if fields[field]['type'] == 'many2one'] oneToManyFields = dict(oneToManyFields) selectionDialog = Common.SelectionDialog( _('Choose field to insert in batch action'), oneToManyFields, self) if selectionDialog.exec_() == QDialog.Rejected: return False fieldString = selectionDialog.result[0] fieldName = selectionDialog.result[1] self.newField = fieldName fieldModel = fields[fieldName]['relation'] fields = { 'many2many': { 'string': fieldString, 'name': 'many2many', 'type': 'many2many', 'relation': fieldModel, } } arch = '' arch += '<?xml version="1.0"?>' arch += '<form string="%s">\n' % _('Batch Insert') arch += '<label string="%s" colspan="4"/>' % fieldString arch += '<field name="many2many" colspan="4" nolabel="1"/>' arch += '</form>' group = RecordGroup(fieldModel, fields) self.screen.setRecordGroup(group) self.screen.new(default=False) self.screen.addView(arch, fields, display=True) return True