class AnagraficaCategorieArticoliDetail(AnagraficaDetail):
    """ Dettaglio dell'anagrafica delle categorie articoli """

    def __init__(self, anagrafica):
        AnagraficaDetail.__init__(self,
            anagrafica,
            path='_anagrafica_categorie_articoli_elements.glade')

    def setDao(self, dao):
        self.dao = dao
        if dao is None:
            self.dao = CategoriaArticolo()
            self._anagrafica._newRow((self.dao, '', ''))
        #self._refresh()
        return self.dao

    def updateDao(self):
        if self.dao:
            self.dao = CategoriaArticolo().getRecord(id=self.dao.id)
        self._refresh()

    def _refresh(self):
        sel = self._anagrafica.anagrafica_treeview.get_selection()
        (model, iterator) = sel.get_selected()
        if iterator and self.dao:
            model.set_value(iterator, 0, self.dao)
            model.set_value(iterator, 1, self.dao.denominazione)
            model.set_value(iterator, 2, self.dao.denominazione_breve)

    def saveDao(self):
        sel = self._anagrafica.anagrafica_treeview.get_selection()
        (model, iterator) = sel.get_selected()
        denominazione = model.get_value(iterator, 1) or ''
        denominazioneBreve = model.get_value(iterator, 2) or ''
        if (denominazione == ''):
            obligatoryField(self._anagrafica.getTopLevel(),
                    self._anagrafica.anagrafica_treeview)
        if (denominazioneBreve == ''):
            obligatoryField(self._anagrafica.getTopLevel(),
                    self._anagrafica.anagrafica_treeview)
        self.dao.denominazione = denominazione
        self.dao.denominazione_breve = denominazioneBreve
        self.dao.persist()

    def deleteDao(self):
        usata = Articolo().select(idCategoria=self.dao.id, batchSize=None)
        if usata:
            msg = """NON è possibile cancellare questa CATEGORIA ARTICOLO
perchè abbinata ad uno o più articoli

ATTENZIONE ATTENZIONE!!

E' però possibile "passare" tutti gli articoli della categoria che
si vuole cancellare ad un'altra ancora presente.
Inserite la descrizione breve ( Esattamente come è scritta)
della categoria di destinazione qui sotto e premete SI
L'operazione è irreversibile,retroattiva e potrebbe impiegare qualche minuto
"""
            move, nuova_categoria = YesNoDialog(msg=msg,
                                        transient=None, show_entry=True)
            if move and nuova_categoria:
                cate = CategoriaArticolo().select(
                                    denominazioneBreveEM=nuova_categoria)
                if cate:
                    idcat = cate[0].id
                else:
                    msg = """NON è stato possibile trovare la categoria
 di passaggio, non faccio niente"""
                    messageInfo(msg=msg)
                    return
                for u in usata:
                    u.id_categoria_articolo = idcat
                    u.persist()
                self.dao.delete()
        else:
            self.dao.delete()