예제 #1
0
 def on_completion_match(self, completion, model, iter):
     name = model[iter][1]
     domain = self._view.modelfield.domain_get(self._view.model)
     context = self._view.modelfield.context_get(self._view.model)
     ids = rpc.session.rpc_exec_auth('/object', 'execute',
                                     self.attrs['relation'], 'name_search',
                                     name, domain, 'ilike', context)
     if len(ids) == 1:
         self._view.modelfield.set_client(self._view.model, ids[0])
         self.display(self._view.model, self._view.modelfield)
         self.ok = True
     else:
         win = win_search(self.attrs['relation'],
                          sel_multi=False,
                          ids=map(lambda x: x[0], ids),
                          context=context,
                          domain=domain,
                          window=self._window)
         ids = win.go()
         if ids:
             name = rpc.session.rpc_exec_auth('/object', 'execute',
                                              self.attrs['relation'],
                                              'name_get', [ids[0]],
                                              rpc.session.context)[0]
             self._view.modelfield.set_client(self._view.model, name)
     return True
 def sig_find(self, widget, event=None, leave=True):
     self.ok = False
     self.wid_text.disconnect(self.wid_text_focus_out_id)
     if not self._readonly:
         domain = self._view.modelfield.domain_get(self._view.model)
         context = self._view.modelfield.context_get(self._view.model)
         self.wid_text.grab_focus()
         name_search = self.wid_text.get_text() or ''
         if name_search == self.value_on_field:
             name_search = ''
         ids = rpc.session.rpc_exec_auth('/object', 'execute', self.attrs['relation'], 'name_search', name_search, domain, 'ilike', context)
         if (len(ids)==1) and leave and event:
             self._view.modelfield.set_client(self._view.model, ids[0],
                     force_change=True)
             self.wid_text_focus_out_id = self.wid_text.connect_after('focus-out-event', self.sig_focus_out, True)
             self.display(self._view.model, self._view.modelfield)
             self.ok = True
             return True
         #Updating the context in order to avoid domain of name_search and custom domain of search_context
         context.update({'name_search':name_search})
         win = win_search(self.attrs['relation'], sel_multi=False, ids=map(lambda x: x[0], ids), context=context, domain=domain, parent=self._window)
         ids = win.go()
         if ids:
             name = rpc.session.rpc_exec_auth('/object', 'execute', self.attrs['relation'], 'name_get', [ids[0]], rpc.session.context)[0]
             self._view.modelfield.set_client(self._view.model, name,
                     force_change=True)
     self.wid_text_focus_out_id = self.wid_text.connect_after('focus-out-event', self.sig_focus_out, True)
     self.display(self._view.model, self._view.modelfield)
     self.ok=True
예제 #3
0
    def _sig_add(self, *args):
        domain = self._view.modelfield.domain_get(self._view.model)
        context = self._view.modelfield.context_get(self._view.model)

        records = rpc.session.rpc_exec_auth('/object', 'execute',
                                            self.attrs['relation'],
                                            'name_search',
                                            self.wid_text.get_text(), domain,
                                            'ilike', context)
        ids = [oid for oid, _ in records]
        self.wid_text.set_text('')
        win = win_search(self.attrs['relation'],
                         sel_multi=True,
                         ids=ids,
                         context=context,
                         domain=domain,
                         parent=self._window)
        ids = win.go()

        if ids == None:
            ids = []
        if self.name in self.model.pager_cache:
            self.model.pager_cache[self.name] = list(
                set(self.model.pager_cache[self.name] + ids))
        else:
            self.model.pager_cache[self.name] = ids
        self.model.is_m2m_modified = True
        self._focus_out()
        self.pager.reset_pager()
        self.pager.search_count()
예제 #4
0
    def open_remote(self, model, create=True, changed=False, text=None):
        modelfield = model[self.field_name]
        relation = modelfield.attrs['relation']

        rpc = RPCProxy(relation)
        context = model[self.field_name].context_get(model)
        domain = model[self.field_name].domain_get(model)
        if create:
            if text and len(text) and text[0] <> '(':
                domain.append(('name', '=', text))
            ids = rpc.search(domain)
            if ids and len(ids) == 1:
                return True, ids
        else:
            ids = model[self.field_name].get_client(model)
        win = win_search(relation,
                         sel_multi=True,
                         ids=ids,
                         context=context,
                         domain=domain)
        found = win.go()
        if found:
            return True, found
        else:
            return False, None
예제 #5
0
    def _sig_add(self, *args):
        domain = self._view.modelfield.domain_get(self._view.model)
        context = self._view.modelfield.context_get(self._view.model)

        # exclude the ids that are already present
        if self.model.pager_cache.get(self.name):
            domain.append(('id', 'not in', self.model.pager_cache.get(self.name)))

        records = rpc.session.rpc_exec_auth('/object', 'execute',
                                        self.attrs['relation'], 'name_search',
                                        self.wid_text.get_text(), domain, 'ilike', context)
        ids = [oid for oid, _ in records]
        self.wid_text.set_text('')
        win = win_search(self.attrs['relation'], sel_multi=True, ids=ids, context=context, domain=domain, parent=self._window)
        ids = win.go()

        if ids != None:
            if self.name in self.model.pager_cache:
                self.model.pager_cache[self.name] = list(set(self.model.pager_cache[self.name] + ids))
            else:
                self.model.pager_cache[self.name] = ids
            self.model.is_m2m_modified = True
        self._focus_out()
        self.pager.reset_pager()
        self.pager.search_count()
예제 #6
0
    def _sig_add(self, *args):
        flag=False
        newids=[]
        domain = self._view.modelfield.domain_get(self._view.model)
        context = self._view.modelfield.context_get(self._view.model)

        ids = rpc.session.rpc_exec_auth('/object', 'execute', self.attrs['relation'], 'name_search', self.wid_text.get_text(), domain, 'ilike', context)
        ids = map(lambda x: x[0], ids)
        self.check_exist()
#        if len(ids)<>1:
        win = win_search(self.attrs['relation'], sel_multi=True, ids=ids, context=context, domain=domain, parent=self._window)
        ids = win.go()
            
        if ids == None:
            ids=[]
        if len(self.avail_ids) and len(ids):
            for i in ids:
                if i not in self.avail_ids:
                    newids.append(i)
                    flag=True
            if flag==True:
                ids=newids
            else:
                ids=[]
        self.screen.load(ids)
        for i in ids:
            self.avail_ids.add(i)
        self.screen.display()
        self.wid_text.set_text('')
        self._focus_out()
예제 #7
0
 def _sig_search(self, *args):
     win = win_search(self.action['res_model'],
                      domain=self.domain,
                      context=self.context)
     res = win.go()
     if res:
         self.screen.clear()
         self.screen.load(res)
예제 #8
0
    def search_remote(self, relation, ids=[], domain=[], context={}):
        rpc = RPCProxy(relation)

        win = win_search(relation, sel_multi=False, ids=ids, context=context, domain=domain)
        found = win.go()
        if found:
            return rpc.name_get([found[0]], context)[0]
        else:
            return False, None
예제 #9
0
    def search_remote(self, relation, ids=[], domain=[], context={}):
        rpc = RPCProxy(relation)

        win = win_search(relation, sel_multi=False, ids=ids, context=context, domain=domain)
        found = win.go()
        if found:
            return rpc.name_get([found[0]], context)[0]
        else:
            return False, None
예제 #10
0
    def sig_activate(self, widget, event=None, leave=False):
        self.ok = False
        value = self._view.modelfield.get_client(self._view.model)

        self.wid_text.disconnect(self.wid_text_focus_out_id)
        if not value:
            model, (id, name) = self.get_model() or '', (0, '')
        else:
            model, (id, name) = value
        if id:
            if not leave:
                #print self._window
                dia = dialog(model, id, attrs=self.attrs, window=self._window)
                ok, id = dia.run()
                if ok:
                    self._view.modelfield.set_client(self._view.model,
                                                     (model, id),
                                                     force_change=True)
                dia.destroy()
        else:
            if not self._readonly and (self.wid_text.get_text() or not leave):
                domain = self._view.modelfield.domain_get(self._view.model)
                context = self._view.modelfield.context_get(self._view.model)

                ids = rpc.session.rpc_exec_auth('/object', 'execute', model,
                                                'name_search',
                                                self.wid_text.get_text(),
                                                domain, 'ilike', context)
                if len(ids) == 1:
                    id, name = ids[0]
                    self._view.modelfield.set_client(self._view.model,
                                                     (model, [id, name]))
                    self.display(self._view.model, self._view.modelfield)
                    self.ok = True
                    self.wid_text_focus_out_id = self.wid_text.connect_after(
                        'focus-out-event', self.sig_activate, True)
                    return True

                win = win_search(model,
                                 sel_multi=False,
                                 ids=[x[0] for x in ids],
                                 context=context,
                                 domain=domain,
                                 parent=self._window)
                ids = win.go()
                if ids:
                    id, name = rpc.session.rpc_exec_auth(
                        '/object', 'execute', model, 'name_get', [ids[0]],
                        rpc.session.context)[0]
                    self._view.modelfield.set_client(self._view.model,
                                                     (model, [id, name]))
        self.wid_text_focus_out_id = self.wid_text.connect_after(
            'focus-out-event', self.sig_activate, True)
        self.display(self._view.model, self._view.modelfield)
        self.ok = True
예제 #11
0
 def sig_find(self, widget, event=None, leave=True):
     from modules.gui.window.win_search import win_search
     name_search = self.wid_text.get_text() or ''
     ids = rpc.session.rpc_exec_auth('/object', 'execute', self.attrs['relation'], 'name_search', name_search, [], 'ilike', rpc.session.context)
     win = win_search(self.attrs['relation'], sel_multi=False, ids=map(lambda x: x[0], ids), context=rpc.session.context, parent=self.parent)
     win.glade.get_widget('newbutton').hide()
     ids = win.go()
     if ids:
         self.selected_value = rpc.session.rpc_exec_auth('/object', 'execute', self.attrs['relation'], 'name_get', [ids[0]], rpc.session.context)[0]
         self.wid_text.set_text(self.selected_value[1])
     return
예제 #12
0
 def value_from_text(self, model, text):
     if not text:
         return []
     if not (text[0]<>'('):
         return model[self.field_name].get(model)
     relation = model[self.field_name].attrs['relation']
     rpc = RPCProxy(relation)
     domain = model[self.field_name].domain_get(model)
     context = model[self.field_name].context_get(model)
     names = rpc.name_search(text, domain, 'ilike', context)
     ids = [x[0] for x in names]
     win = win_search(relation, sel_multi=True, ids=ids, context=context, domain=domain)
     found = win.go()
     return found or []
예제 #13
0
    def sig_activate(self, widget, event=None, leave=False):
        self.ok = False
        value = self._view.modelfield.get_client(self._view.model)

        self.wid_text.disconnect(self.wid_text_focus_out_id)
        if not value:
            model, (id, name) = self.get_model() or '', (0, '')
        else:
            model, (id, name) = value
        if id:
            if not leave:
                #print self._window
                dia = dialog(model, id, attrs=self.attrs, window=self._window)
                ok, id = dia.run()
                if ok:
                    self._view.modelfield.set_client(self._view.model,
                            (model, id), force_change=True)
                dia.destroy()
        else:
            if not self._readonly and ( self.wid_text.get_text() or not leave):
                domain = self._view.modelfield.domain_get(self._view.model)
                context = self._view.modelfield.context_get(self._view.model)

                ids = rpc.session.rpc_exec_auth('/object', 'execute', model,
                        'name_search', self.wid_text.get_text(), domain,
                        'ilike', context)
                if len(ids)==1:
                    id, name = ids[0]
                    self._view.modelfield.set_client(self._view.model,
                            (model, [id, name]))
                    self.display(self._view.model, self._view.modelfield)
                    self.ok = True
                    self.wid_text_focus_out_id = self.wid_text.connect_after(
                        'focus-out-event', self.sig_activate, True)
                    return True

                win = win_search(model, sel_multi=False,
                        ids=[x[0] for x in ids], context=context,
                        domain=domain, parent=self._window)
                ids = win.go()
                if ids:
                    id, name = rpc.session.rpc_exec_auth('/object', 'execute',
                            model, 'name_get', [ids[0]],
                            rpc.session.context)[0]
                    self._view.modelfield.set_client(self._view.model,
                            (model, [id, name]))
        self.wid_text_focus_out_id = self.wid_text.connect_after(
                'focus-out-event', self.sig_activate, True)
        self.display(self._view.model, self._view.modelfield)
        self.ok=True
예제 #14
0
 def value_from_text(self, model, text):
     if not text:
         return []
     if not (text[0]<>'('):
         return model[self.field_name].get(model)
     relation = model[self.field_name].attrs['relation']
     rpc = RPCProxy(relation)
     domain = model[self.field_name].domain_get(model)
     context = model[self.field_name].context_get(model)
     names = rpc.name_search(text, domain, 'ilike', context)
     ids = [x[0] for x in names]
     win = win_search(relation, sel_multi=True, ids=ids, context=context, domain=domain)
     found = win.go()
     return found or []
예제 #15
0
 def sig_find(self, widget, event=None, leave=True):
     self.ok = False
     self.wid_text.disconnect(self.wid_text_focus_out_id)
     if not self._readonly:
         domain = self._view.modelfield.domain_get(self._view.model)
         context = self._view.modelfield.context_get(self._view.model)
         self.wid_text.grab_focus()
         name_search = self.wid_text.get_text() or ''
         if name_search == self.value_on_field:
             name_search = ''
         ids = rpc.session.rpc_exec_auth('/object', 'execute',
                                         self.attrs['relation'],
                                         'name_search', name_search, domain,
                                         'ilike', context)
         if (len(ids) == 1) and leave and event:
             self._view.modelfield.set_client(self._view.model,
                                              ids[0],
                                              force_change=True)
             self.wid_text_focus_out_id = self.wid_text.connect_after(
                 'focus-out-event', self.sig_focus_out, True)
             self.display(self._view.model, self._view.modelfield)
             self.ok = True
             return True
         #Updating the context in order to avoid domain of name_search and custom domain of search_context
         context.update({'name_search': name_search})
         win = win_search(self.attrs['relation'],
                          sel_multi=False,
                          ids=map(lambda x: x[0], ids),
                          context=context,
                          domain=domain,
                          parent=self._window)
         ids = win.go()
         if ids:
             name = rpc.session.rpc_exec_auth('/object', 'execute',
                                              self.attrs['relation'],
                                              'name_get', [ids[0]],
                                              rpc.session.context)[0]
             self._view.modelfield.set_client(self._view.model,
                                              name,
                                              force_change=True)
     self.wid_text_focus_out_id = self.wid_text.connect_after(
         'focus-out-event', self.sig_focus_out, True)
     self.display(self._view.model, self._view.modelfield)
     self.ok = True
예제 #16
0
    def open_remote(self, model, create=True, changed=False, text=None):
        modelfield = model[self.field_name]
        relation = modelfield.attrs['relation']

        rpc = RPCProxy(relation)
        context = model[self.field_name].context_get(model)
        domain = model[self.field_name].domain_get(model)
        if create:
            if text and len(text) and text[0]<>'(':
                domain.append(('name','=',text))
            ids = rpc.search(domain)
            if ids and len(ids)==1:
                return True, ids
        else:
            ids = model[self.field_name].get_client(model)
        win = win_search(relation, sel_multi=True, ids=ids, context=context, domain=domain)
        found = win.go()
        if found:
            return True, found
        else:
            return False, None
예제 #17
0
 def on_completion_match(self, completion, model, iter):
     name = model[iter][1]
     domain = self._view.modelfield.domain_get(self._view.model)
     context = self._view.modelfield.context_get(self._view.model)
     ids = rpc.session.rpc_exec_auth('/object', 'execute',
             self.attrs['relation'], 'name_search', name, domain, 'ilike',
             context)
     if len(ids)==1:
         self._view.modelfield.set_client(self._view.model, ids[0])
         self.display(self._view.model, self._view.modelfield)
         self.ok = True
     else:
         win = win_search(self.attrs['relation'], sel_multi=False,
                 ids=map(lambda x: x[0], ids), context=context,
                 domain=domain, window=self._window)
         ids = win.go()
         if ids:
             name = rpc.session.rpc_exec_auth('/object', 'execute',
                     self.attrs['relation'], 'name_get', [ids[0]],
                     rpc.session.context)[0]
             self._view.modelfield.set_client(self._view.model, name)
     return True
예제 #18
0
    def _sig_add(self, *args):
        flag = False
        newids = []
        domain = self._view.modelfield.domain_get(self._view.model)
        context = self._view.modelfield.context_get(self._view.model)

        ids = rpc.session.rpc_exec_auth('/object', 'execute',
                                        self.attrs['relation'], 'name_search',
                                        self.wid_text.get_text(), domain,
                                        'ilike', context)
        ids = map(lambda x: x[0], ids)
        self.check_exist()
        #        if len(ids)<>1:
        win = win_search(self.attrs['relation'],
                         sel_multi=True,
                         ids=ids,
                         context=context,
                         domain=domain,
                         parent=self._window)
        ids = win.go()

        if ids == None:
            ids = []
        if len(self.avail_ids) and len(ids):
            for i in ids:
                if i not in self.avail_ids:
                    newids.append(i)
                    flag = True
            if flag == True:
                ids = newids
            else:
                ids = []
        self.screen.load(ids)
        for i in ids:
            self.avail_ids.add(i)
        self.screen.display()
        self.wid_text.set_text('')
        self._focus_out()
    def _sig_add(self, *args):
        domain = self._view.modelfield.domain_get(self._view.model)
        context = self._view.modelfield.context_get(self._view.model)
        records = rpc.session.rpc_exec_auth('/object', 'execute',
                                        self.attrs['relation'], 'name_search',
                                        self.wid_text.get_text(), domain, 'ilike', context)
        ids = [oid for oid, _ in records]
        #Updating the context in order to avoid domain of name_search and custom domain of search_context
        context.update({'name_search':self.wid_text.get_text()})
        self.wid_text.set_text('')
        win = win_search(self.attrs['relation'], sel_multi=True, ids=ids, context=context, domain=domain, parent=self._window)
        ids = win.go()

        if ids == None:
            ids = []
        if self.name in self.model.pager_cache:
            self.model.pager_cache[self.name] = list(set(self.model.pager_cache[self.name] + ids))
        else:
            self.model.pager_cache[self.name] = ids
        self.model.is_m2m_modified = True
        self._focus_out()
        self.pager.reset_pager()
        self.pager.search_count()
예제 #20
0
파일: action.py 프로젝트: gisce/erpclient
 def _sig_search(self, *args):
     win = win_search(self.action['res_model'], domain=self.domain, context=self.context)
     res = win.go()
     if res:
         self.screen.clear()
         self.screen.load(res)