def on_combobox_persona_giuridica_search_clicked(self, combobox):
        #richiama la ricerca clienti/fornitori

        def refresh_combobox_persona_giuridica(anagWindow):
            self._resultsCount = self._ricerca.getResultsCount()
            resultsElement = self._ricerca.getResultsElement()
            if not (self._resultsCount > 0):
                self.set_active(0)
                return

            if self._resultsCount == 1:
                id = resultsElement.id
                if self._type == 'cliente':
                    res = leggiCliente(id)
                elif self._type == 'fornitore':
                    res = leggiFornitore(id)
                denominazione = res["ragioneSociale"]
                if denominazione == '':
                    denominazione = res["nome"] + ' ' + res["cognome"]
                combobox.refresh(id, denominazione, res)
            else:
                if self._type == 'cliente':
                    combobox.refresh(
                        None,
                        ('< %d clienti selezionati... >' % self._resultsCount),
                        None,
                        rowType='old_search')
                elif self._type == 'fornitore':
                    combobox.refresh(None, ('< %d fornitori selezionati... >' %
                                            self._resultsCount),
                                     None,
                                     rowType='old_search')
            if self._callName is not None:
                self._callName()

        if combobox.on_selection_changed():
            if self._ricerca is None:
                if self._type == 'cliente':
                    from promogest.ui.RicercaComplessaClienti import RicercaComplessaClienti
                    self._ricerca = RicercaComplessaClienti()
                elif self._type == 'fornitore':
                    from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
                    self._ricerca = RicercaComplessaFornitori()
                if not self._filter:
                    self._ricerca.setTreeViewSelectionType(
                        gtk.SELECTION_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = combobox.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide", refresh_combobox_persona_giuridica)
            self._ricerca.getTopLevel().show_all()

        elif self._callName is not None:
            self._callName()
    def on_icon_press(self,entry,position,event):
        """
        scopettina agganciata ad un segnale generico
        """
        if position.value_nick == "primary":

            def refresh_entry(anagWindow):
                self._resultsCount = self._ricerca.getResultsCount()
                resultsElement = self._ricerca.getResultsElement()
                if not(self._resultsCount > 0):
                    self.set_active(0)
                    return

                if self._resultsCount == 1:
                    id = resultsElement.id
                    self.setId(id)
                    try:
                        self.anaedit.persona_giuridica_changed(self)
                    except:
                        pass

            if self._type == 'cliente':
                from promogest.ui.RicercaComplessaClienti import RicercaComplessaClienti
                self._ricerca = RicercaComplessaClienti()
            elif self._type == 'fornitore':
                from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
                self._ricerca = RicercaComplessaFornitori()
            if not self._filter:
                self._ricerca.setTreeViewSelectionType(GTK_SELECTIONMODE_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = self.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide",
                               refresh_entry)
            self._ricerca.show_all()
        else:                            #secondary
            self.clean_entry()
    def on_icon_press(self,entry,position,event):
        """
        scopettina agganciata ad un segnale generico
        """
        if position.value_nick == "primary":

            def refresh_entry(anagWindow):
                self._resultsCount = self._ricerca.getResultsCount()
                resultsElement = self._ricerca.getResultsElement()
                if not(self._resultsCount > 0):
                    self.set_active(0)
                    return

                if self._resultsCount == 1:
                    id = resultsElement.id
                    res = leggiFornitore(id)
                    denominazione = res["ragioneSociale"]
                    if denominazione == '':
                        denominazione = res["nome"] + ' ' + res["cognome"]
                    self.set_text(denominazione)
                    self._id = id
                    #self.on_completion_match_main()
            from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
            try:
                idCat = findIdFromCombobox(self.anaedit.
                id_categoria_fornitore_customcombobox.combobox)
            except:
                idCat = None
            self._ricerca = RicercaComplessaFornitori(idCategoria = idCat)
            if not self._filter:
                self._ricerca.setTreeViewSelectionType(GTK_SELECTIONMODE_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = self.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide",
                               refresh_entry)
            self._ricerca.show_all()

        else:                            #secondary
             self.clear_entry()
class PersonaGiuridicaSearchWidget(CustomComboBoxSearch):
    """ Classe base per la ricerca clienti """
    __gtype_name__ = 'PersonaGiuridicaSearchWidget'
    def __init__(self):
        CustomComboBoxSearch.__init__(self)

        self.connect("delete-event", self.on_widget_delete)
        self.connect('changed',
                           self.on_entry_key_press_event)
        #self.connect("destroy-event", self.on_widget_destroy)
        self.connect("icon-press", self.on_icon_press)
        self._callName = None
        self._ricerca = None
        self._filter = True
        self._resultsCount = 0
        self._type = 'cliente'
        self.clear()

    def on_icon_press(self,entry,position,event):
        """
        scopettina agganciata ad un segnale generico
        """
        if position.value_nick == "primary":

            def refresh_entry(anagWindow):
                self._resultsCount = self._ricerca.getResultsCount()
                resultsElement = self._ricerca.getResultsElement()
                if not(self._resultsCount > 0):
                    self.set_active(0)
                    return

                if self._resultsCount == 1:
                    id = resultsElement.id
                    self.setId(id)
                    try:
                        self.anaedit.persona_giuridica_changed(self)
                    except:
                        pass

            if self._type == 'cliente':
                from promogest.ui.RicercaComplessaClienti import RicercaComplessaClienti
                self._ricerca = RicercaComplessaClienti()
            elif self._type == 'fornitore':
                from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
                self._ricerca = RicercaComplessaFornitori()
            if not self._filter:
                self._ricerca.setTreeViewSelectionType(GTK_SELECTIONMODE_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = self.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide",
                               refresh_entry)
            self._ricerca.show_all()
        else:                            #secondary
            self.clean_entry()


    def ricercaDao(self, keyname):
        from promogest.dao.Cliente import Cliente
        from promogest.dao.Fornitore import Fornitore
        if self._type == "fornitore":
            cli = Fornitore().select(ragioneSociale=keyname, batchSize=40)
        else:
            cli = Cliente().select(ragioneSociale=keyname, batchSize=40)
        model = self.completion.get_model()
        model.clear()
        for m in cli:
            rag = m.ragione_sociale or (m.cognome + " " + m.nome)
            model.append(('empty', m.id, rag, m))


    def setId(self, value):
        self.insertComboboxSearchPersonaGiuridica(self, value)
        self._id = value


    def getId(self):
        #if self.isEmpty():
            #self.clear()
        #elif (self._resultsCount > 1) and (self._ricerca is not None):
            #self._ricerca.refresh()
            #return self.idlist
        return self._id


    def getData(self):
        self.insertComboboxSearchPersonaGiuridica(self, self._id)
        return self._container


    def insertComboboxSearchPersonaGiuridica(self, combobox, id, clear=False, filter=True):
        if self._type == 'cliente':
            res = leggiCliente(id)
        elif self._type == 'fornitore':
            res = leggiFornitore(id)
        denominazione = res["ragioneSociale"] or (res["nome"] + ' ' + res["cognome"])
        #if denominazione == '':
            #denominazione = res["nome"] + ' ' + res["cognome"]
        combobox.refresh(id, denominazione, res, clear, filter)
        #self.set_text(denominazione)
        #print "IDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", id
        #self._id = id
        #self.set_text(denominazione)
        self._container = res


    def clear(self):
        self.set_active(0)


    def setOnChangedCall(self, callName=None):
        self._callName = callName


    def setSingleValue(self):
        self._filter = False


    def setMultipleValues(self):
        self._filter = True


    def setType(self, type='cliente'):
        if self._type != type and self._ricerca is not None:
            anagWindow = self._ricerca.getTopLevel()
            anagWindow.destroy()
            del self._ricerca
            self._ricerca = None
        self._type = type


    def getType(self):
        return self._type


    def on_widget_delete(self, widget, event):
        if self._ricerca is not None:
            anagWindow = self._ricerca.getTopLevel()
            anagWindow.destroy()
            del self._ricerca
            self._ricerca = None
class PersonaGiuridicaSearchWidget(CustomComboBoxSearch):
    """ Classe base per la ricerca clienti """
    def __init__(self):
        CustomComboBoxSearch.__init__(self)

        idHandler = self.connect(
            'changed', self.on_combobox_persona_giuridica_search_clicked)
        self.setChangedHandler(idHandler)

        self.connect("delete-event", self.on_widget_delete)

        self._callName = None
        self._ricerca = None
        self._filter = True
        self._resultsCount = 0
        self._type = 'cliente'
        self.clear()

    def on_combobox_persona_giuridica_search_clicked(self, combobox):
        #richiama la ricerca clienti/fornitori

        def refresh_combobox_persona_giuridica(anagWindow):
            self._resultsCount = self._ricerca.getResultsCount()
            resultsElement = self._ricerca.getResultsElement()
            if not (self._resultsCount > 0):
                self.set_active(0)
                return

            if self._resultsCount == 1:
                id = resultsElement.id
                if self._type == 'cliente':
                    res = leggiCliente(id)
                elif self._type == 'fornitore':
                    res = leggiFornitore(id)
                denominazione = res["ragioneSociale"]
                if denominazione == '':
                    denominazione = res["nome"] + ' ' + res["cognome"]
                combobox.refresh(id, denominazione, res)
            else:
                if self._type == 'cliente':
                    combobox.refresh(
                        None,
                        ('< %d clienti selezionati... >' % self._resultsCount),
                        None,
                        rowType='old_search')
                elif self._type == 'fornitore':
                    combobox.refresh(None, ('< %d fornitori selezionati... >' %
                                            self._resultsCount),
                                     None,
                                     rowType='old_search')
            if self._callName is not None:
                self._callName()

        if combobox.on_selection_changed():
            if self._ricerca is None:
                if self._type == 'cliente':
                    from promogest.ui.RicercaComplessaClienti import RicercaComplessaClienti
                    self._ricerca = RicercaComplessaClienti()
                elif self._type == 'fornitore':
                    from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
                    self._ricerca = RicercaComplessaFornitori()
                if not self._filter:
                    self._ricerca.setTreeViewSelectionType(
                        gtk.SELECTION_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = combobox.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide", refresh_combobox_persona_giuridica)
            self._ricerca.getTopLevel().show_all()

        elif self._callName is not None:
            self._callName()

    def setId(self, value):
        self.insertComboboxSearchPersonaGiuridica(self, value)

    def getId(self):
        if self.isEmpty():
            self.clear()
        elif (self._resultsCount > 1) and (self._ricerca is not None):
            self._ricerca.refresh()

        return self._id

    def getData(self):
        return self._container

    def insertComboboxSearchPersonaGiuridica(self,
                                             combobox,
                                             id,
                                             clear=False,
                                             filter=True):
        if self._type == 'cliente':
            res = leggiCliente(id)
        elif self._type == 'fornitore':
            res = leggiFornitore(id)
        denominazione = res["ragioneSociale"]
        if denominazione == '':
            denominazione = res["nome"] + ' ' + res["cognome"]
        combobox.refresh(id, denominazione, res, clear, filter)

    def clear(self):
        if self._type == 'cliente':
            Environment.connection.execStoredProcedure(
                'ClienteFilteredDestroy', ())
        elif self._type == 'fornitore':
            Environment.connection.execStoredProcedure(
                'FornitoreFilteredDestroy', ())
        self.set_active(0)

    def setOnChangedCall(self, callName=None):
        self._callName = callName

    def setSingleValue(self):
        self._filter = False

    def setMultipleValues(self):
        self._filter = True

    def setType(self, type='cliente'):
        if self._type != type and self._ricerca is not None:
            anagWindow = self._ricerca.getTopLevel()
            anagWindow.destroy()
            del self._ricerca
            self._ricerca = None
        self._type = type

    def getType(self):
        return self._type

    def on_widget_delete(self, widget, event):
        if self._ricerca is not None:
            anagWindow = self._ricerca.getTopLevel()
            anagWindow.destroy()
            del self._ricerca
            self._ricerca = None
class FornitoreSearchWidget(CustomComboBoxSearch):
    """ Classe base per la ricerca fornitori """
    __gtype_name__ = 'FornitoreSearchWidget'

    def __init__(self):
        CustomComboBoxSearch.__init__(self)

        self.connect('changed',
                           self.on_entry_key_press_event)

        self.connect("destroy-event", self.on_widget_destroy)
        self.connect("icon-press", self.on_icon_press)
        self._callName = None
        self._ricerca = None
        self._filter = True
        self._resultsCount = 0
        self.clear()


    def on_icon_press(self,entry,position,event):
        """
        scopettina agganciata ad un segnale generico
        """
        if position.value_nick == "primary":

            def refresh_entry(anagWindow):
                self._resultsCount = self._ricerca.getResultsCount()
                resultsElement = self._ricerca.getResultsElement()
                if not(self._resultsCount > 0):
                    self.set_active(0)
                    return

                if self._resultsCount == 1:
                    id = resultsElement.id
                    res = leggiFornitore(id)
                    denominazione = res["ragioneSociale"]
                    if denominazione == '':
                        denominazione = res["nome"] + ' ' + res["cognome"]
                    self.set_text(denominazione)
                    self._id = id
                    #self.on_completion_match_main()
            from promogest.ui.RicercaComplessaFornitori import RicercaComplessaFornitori
            try:
                idCat = findIdFromCombobox(self.anaedit.
                id_categoria_fornitore_customcombobox.combobox)
            except:
                idCat = None
            self._ricerca = RicercaComplessaFornitori(idCategoria = idCat)
            if not self._filter:
                self._ricerca.setTreeViewSelectionType(GTK_SELECTIONMODE_SINGLE)
            else:
                self._ricerca.refresh()
            anagWindow = self._ricerca.getTopLevel()
            returnWindow = self.get_toplevel()
            anagWindow.set_transient_for(returnWindow)
            anagWindow.connect("hide",
                               refresh_entry)
            self._ricerca.show_all()

        else:                            #secondary
             self.clear_entry()

    def ricercaDao(self, keyname):
        from promogest.dao.Fornitore import Fornitore
        try:
            idCat = findIdFromCombobox(self.anaedit.
            id_categoria_fornitore_customcombobox.combobox)
        except:
            idCat = None
        cli = Fornitore().select(ragioneSociale=keyname,idCategoria=idCat, batchSize=40)
        model = self.completion.get_model()
        model.clear()
        for m in cli:
            model.append(('empty', m.id, m.ragione_sociale, m))


    def setId(self, value):
        self.insertComboboxSearchFornitore(self, value)

    def getId(self):
        #if self.isEmpty():
            #self.clear()
        #elif (self._resultsCount > 1) and (self._ricerca is not None):
            #self._ricerca.refresh()
            #return self.idlist
        return self._id

    def getData(self):
        return self._container

    def insertComboboxSearchFornitore(self, combobox, idFornitore, clear=False, filter=True):
        res = leggiFornitore(idFornitore)
        denominazione = res["ragioneSociale"]
        if denominazione == '':
            denominazione = res["nome"] + ' ' + res["cognome"]
        combobox.refresh(idFornitore, denominazione, res, clear, filter)

    def clear(self):
        self.set_active(0)

    def setOnChangedCall(self, callName=None):
        self._callName = callName

    def setSingleValue(self):
        self._filter = False

    def setMultipleValues(self):
        self._filter = True

    def on_widget_destroy(self, widget, event):
        if self._ricerca is not None:
            anagWindow = self._ricerca.getTopLevel()
            anagWindow.destroy()
            del self._ricerca
            self._ricerca = None