def setDao(self, dao):
        self.dao = dao
        if dao is None:
            # Crea un nuovo Dao vuoto
            self.dao = Fornitore()
            self.dao.codice = promogest.dao.Fornitore.getNuovoCodiceFornitore()

        if dao is None:
            self.dao_contatto = ContattoFornitore()
        else:
            self.dao_contatto = ContattoFornitore().select(idFornitore=self.dao.id)
            if self.dao_contatto:
                self.dao_contatto = self.dao_contatto[0]
            else:
                self.dao_contatto = ContattoFornitore()
        self._refresh()
        return self.dao
class AnagraficaFornitoriEdit(AnagraficaEdit, AnagraficaPGEdit):
    """ Modifica un record dell'anagrafica dei fornitori """

    def __init__(self, anagrafica):
        AnagraficaEdit.__init__(self,
                            anagrafica,
                            'Dati fornitore',
                            root='anagrafica_fornitori_detail_notebook',
                            path='_anagrafica_fornitori_elements.glade')
        AnagraficaPGEdit.__init__(self, "fornitore")
        self._widgetFirstFocus = self.codice_entry

    def draw(self,cplx=False):
        fillComboBoxNazione(self.nazione_combobox, default="Italia")
        fillComboboxCategorieFornitori(self.id_categoria_fornitore_customcombobox.combobox)
        self.id_categoria_fornitore_customcombobox.connect('clicked',
                                                           on_id_categoria_fornitore_customcombobox_clicked)
        fillComboboxPagamenti(self.id_pagamento_customcombobox.combobox)
        self.id_pagamento_customcombobox.connect('clicked',
                                                 on_id_pagamento_customcombobox_clicked)
        fillComboboxMagazzini(self.id_magazzino_customcombobox.combobox)
        self.id_magazzino_customcombobox.connect('clicked',
                                                 on_id_magazzino_customcombobox_clicked)

        self.fornitore_insegna = setconf("Fornitori", "fornitore_insegna")
        if not self.fornitore_insegna:
            self.insegna_entry.destroy()
            self.insegna_label.destroy()
        self.nome_entry.destroy()
        self.cognome_entry.destroy()
        self.cognome_label.destroy()
        self.nome_label.destroy()


    def setDao(self, dao):
        self.dao = dao
        if dao is None:
            # Crea un nuovo Dao vuoto
            self.dao = Fornitore()
            self.dao.codice = promogest.dao.Fornitore.getNuovoCodiceFornitore()

        if dao is None:
            self.dao_contatto = ContattoFornitore()
        else:
            self.dao_contatto = ContattoFornitore().select(idFornitore=self.dao.id)
            if self.dao_contatto:
                self.dao_contatto = self.dao_contatto[0]
            else:
                self.dao_contatto = ContattoFornitore()
        self._refresh()
        return self.dao

    def showTotaliDareAvere(self):

        if self.dao.id:
            #Calcoliamo il totale annuale:
            totaleAvereAnnuale = TotaleAnnualeFornitore(id_fornitore=self.dao.id)
            self.totale_annuale_avere_entry.set_text('%.2f' % totaleAvereAnnuale)
            #Calcoliamo il totale sospeso:
            totaleAvereSospeso = TotaleFornitoreAperto(id_fornitore=self.dao.id)
            self.totale_avere_entry.set_text('%.2f' % totaleAvereSospeso)
        self.anagrafica_fornitori_detail_notebook.set_current_page(0)


    def saveDao(self, tipo=None):
        if (self.ragione_sociale_entry.get_text() == ''):
            obligatoryField(self.dialogTopLevel,
                            self.ragione_sociale_entry, campo="Ragione sociale")
        cod = Fornitore().select(codicesatto=self.codice_entry.get_text().upper().strip())
        if len(cod) >1 or (cod and cod[0].id != self.dao.id):
            obligatoryField(self.dialogTopLevel,
                            self.ragione_sociale_entry,
                            msg='CODICE GIÀ PRESENTE')
        self.dao.codice = self.codice_entry.get_text().upper()
        self.dao.codice = omogeneousCode(section="Fornitori", string=self.dao.codice )
        self.dao.ragione_sociale = self.ragione_sociale_entry.get_text()
        if self.fornitore_insegna:
            self.dao.insegna = self.insegna_entry.get_text()
#        self.dao.cognome= self.cognome_entry.get_text()
#        self.dao.nome = self.nome_entry.get_text()
        if (self.dao.codice and (self.dao.ragione_sociale or self.dao.insegna or self.dao.cognome or self.dao.nome)) =='':
            msg="""Il codice è obbligatorio.
    Inserire almeno un campo a scelta tra:
    ragione sociale, insegna, cognome o nome """
            messageInfo(msg=msg)
            raise Exception, 'Operation aborted: Codice Fornitore obbligatorio'
        self.dao.sede_operativa_indirizzo = self.indirizzo_sede_operativa_entry.get_text()
        self.dao.sede_operativa_cap = self.cap_sede_operativa_entry.get_text()
        self.dao.sede_operativa_localita = self.localita_sede_operativa_entry.get_text()
        self.dao.sede_operativa_provincia = self.provincia_sede_operativa_entry.get_text()
        self.dao.sede_legale_indirizzo = self.indirizzo_sede_legale_entry.get_text()
        self.dao.sede_legale_cap = self.cap_sede_legale_entry.get_text()
        self.dao.sede_legale_localita = self.localita_sede_legale_entry.get_text()
        self.dao.sede_legale_provincia = self.provincia_sede_legale_entry.get_text()
        self.dao.codice_fiscale = self.codice_fiscale_entry.get_text()
        self.dao.note = textview_get_text(self.note_textview)
        #if self.dao.codice_fiscale != '':
            #codfis = checkCodFisc(self.dao.codice_fiscale)
            #if not codfis:
                #raise Exception, 'Operation aborted: Codice fiscale errato'
        self.dao.partita_iva = self.partita_iva_entry.get_text()
        #if self.dao.partita_iva != '':
            #partiva = checkPartIva(self.dao.partita_iva)
            #if not partiva:
                #raise Exception, 'Operation aborted: Partita iva errata'
        self.dao.id_categoria_fornitore = findIdFromCombobox(self.id_categoria_fornitore_customcombobox.combobox)
        self.dao.id_pagamento = findIdFromCombobox(self.id_pagamento_customcombobox.combobox)
        self.dao.id_magazzino = findIdFromCombobox(self.id_magazzino_customcombobox.combobox)
        self.dao.nazione = findStrFromCombobox(self.nazione_combobox,0)
        self.dao.persist()

        self.aggiungi_contatto_pg(self, "fornitore")

        self.save_contatto_cellulare_principale(self, self.dao_contatto)
        self.save_contatto_telefono_principale(self, self.dao_contatto)
        self.save_contatto_fax_principale(self, self.dao_contatto)
        self.save_contatto_email_principale(self, self.dao_contatto)
        self.save_contatto_sito_principale(self, self.dao_contatto)

    def on_scheda_contabile_togglebutton_clicked(self, toggleButton):
        """
        Apre la finestra di registrazione documenti, ricercando solo
        i documenti del fornitore
        """

        if not(toggleButton.get_active()):
            toggleButton.set_active(False)
            return

        if self.dao.id is None:
            msg = 'Prima di poter visualizzare la registrazione documenti occorre salvare il fornitore.\n Salvare? '
            if YesNoDialog(msg=msg, transient=self.dialogTopLevel):
                self.on_anagrafica_complessa_detail_dialog_response(
                    self.dialogTopLevel, GTK_RESPONSE_APPLY)
            else:
                toggleButton.set_active(False)
                return

        from promogest.ui.anagDocumenti.AnagraficaDocumenti import AnagraficaDocumenti
        anag = AnagraficaDocumenti()
        anagWindow = anag.getTopLevel()
        showAnagraficaRichiamata(self.dialogTopLevel, anagWindow, toggleButton)
        anag.filter.id_fornitore_filter_customcombobox.setId(self.dao.id)
        anag.filter.solo_contabili_check.set_active(True)
        anag.filter.refresh()


    def on_icon_press_primary(self,entry,position,event):
        if position.value_nick == "primary":
            codice = promogest.dao.Fornitore.getNuovoCodiceFornitore()
            self.codice_entry.set_text(codice)

    def on_contatti_togglebutton_clicked(self, toggleButton):
        if posso("CN"):
            if not(toggleButton.get_active()):
                toggleButton.set_active(False)
                return

            if self.dao.id is None:
                msg = 'Prima di poter inserire i contatti occorre salvare il fornitore.\n Salvare ?'
                if YesNoDialog(msg=msg, transient=self.dialogTopLevel):
                    self.on_anagrafica_complessa_detail_dialog_response(self.dialogTopLevel, GTK_RESPONSE_APPLY)
                else:
                    toggleButton.set_active(False)
                    return

            from promogest.ui.Contatti.AnagraficaContatti import AnagraficaContatti
            anag = AnagraficaContatti(self.dao.id, 'fornitore')
            anagWindow = anag.getTopLevel()

            showAnagraficaRichiamata(self.dialogTopLevel, anagWindow, toggleButton)
        else:
            fenceDialog()
            toggleButton.set_active(False)

    def on_forniture_togglebutton_clicked(self, toggleButton):
        if not(toggleButton.get_active()):
            toggleButton.set_active(False)
            return

        if self.dao.id is None:
            msg = 'Prima di poter inserire delle forniture occorre salvare il fornitore.\n Salvare ?'
            if YesNoDialog(msg=msg, transient=self.dialogTopLevel):
                self.on_anagrafica_complessa_detail_dialog_response(self.dialogTopLevel, GTK_RESPONSE_APPLY)
            else:
                toggleButton.set_active(False)
                return

        from promogest.ui.anagForniture.AnagraficaForniture import AnagraficaForniture
        anag = AnagraficaForniture(None, self.dao.id)
        anagWindow = anag.getTopLevel()

        showAnagraficaRichiamata(self.dialogTopLevel, anagWindow, toggleButton)
    def on_duplica_in_fornitore_activate_item(self, widget):
        dao = self.filter.getSelectedDao()
        if not dao:
            messageInfo(msg="SELEZIONARE UN CLIENTE")
            return
        import promogest.dao.Fornitore
        from promogest.dao.Fornitore import Fornitore
        from promogest.dao.daoContatti.ContattoFornitore import ContattoFornitore
        from promogest.dao.daoContatti.RecapitoContatto import RecapitoContatto
        from promogest.dao.daoContatti.Contatto import Contatto

        d = Fornitore()
        d.codice = promogest.dao.Fornitore.getNuovoCodiceFornitore()
        d.ragione_sociale = dao.ragione_sociale
        d.insegna = dao.insegna
        d.cognome = dao.cognome
        d.nome = dao.nome
        d.sede_operativa_indirizzo = dao.sede_operativa_indirizzo
        d.sede_operativa_cap = dao.sede_operativa_cap
        d.sede_operativa_localita = dao.sede_operativa_localita
        d.sede_operativa_provincia = dao.sede_operativa_provincia
        d.sede_legale_indirizzo = dao.sede_legale_indirizzo
        d.sede_legale_cap = dao.sede_legale_cap
        d.sede_legale_localita = dao.sede_legale_localita
        d.sede_legale_provincia = dao.sede_legale_provincia
        d.codice_fiscale = dao.codice_fiscale
        d.note = dao.note
        d.partita_iva = dao.partita_iva
        # dao.id_categoria_fornitore
        d.id_pagamento = dao.id_pagamento
        d.id_magazzino = dao.id_magazzino
        d.nazione = dao.nazione
        d.persist()
        # SEzione dedicata ai contatti/recapiti principali
        dao_contatto = ContattoFornitore()
        if Environment.tipo_eng == "sqlite":
            forMaxId = Contatto().select(batchSize=None)
            if not forMaxId:
                dao_contatto.id = 1
            else:
                idss = []
                for l in forMaxId:
                    idss.append(l.id)
                dao_contatto.id = (max(idss)) + 1
        appa = ""
        if d.ragione_sociale:
            appa = appa + " " + d.ragione_sociale
        if d.cognome:
            appa = appa + " " + d.cognome
        dao_contatto.cognome = appa
        if d.nome:
            dao_contatto.nome = d.nome
        dao_contatto.tipo_contatto = "fornitore"
        dao_contatto.id_fornitore = d.id
        dao_contatto.persist()

        from promogest.dao.DaoUtils import getRecapitiCliente

        contatti = getRecapitiCliente(dao.id)
        for c in contatti:
            reco = RecapitoContatto()
            reco.id_contatto = dao_contatto.id
            reco.tipo_recapito = c.tipo_recapito
            reco.recapito = c.recapito
            reco.persist()
        messageInfo(msg="CLIENTE DUPLICATO IN FORNITORE")