Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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