コード例 #1
0
    def __init__(self):
        """
        Inicialisação dos campos no menu
        """
        self.problema = None
        self.JP = JanelaProblema()

        self.ge_dic_param_sis = dict()

        self.Pr = Parametros()
        self.ge_dic_param_sis = self.Pr.carrega_parametros()

        if not self.ge_dic_param_sis:
            self.problema = 'Dicionario de parametros vazio ou não localizado'
            logging.error(self.problema)
            self.JP.msgerro(janela=None,
                            texto_primario="Parametros",
                            texto_secundario=self.problema)
            exit(1)

        try:
            self.lg = LogSistema(dic_param_sis=self.ge_dic_param_sis)
        except IOError as problema_lg:
            logging.error(problema_lg)
            self.JP.msgerro(janela=None,
                            texto_primario="Log",
                            texto_secundario=problema_lg)
            exit(1)

        self.caminho_src = abspath(dirname(__file__))

        self.builder = Gtk.Builder()

        try:
            self.caminho_tela = '/'.join([
                self.caminho_src, 'glade',
                self.ge_dic_param_sis['AMBIENTE_TELA']
            ])
            self.builder.add_objects_from_file(self.caminho_tela,
                                               ["w00_principal"])
        except Exception as problema_tl:
            logging.error(problema_tl)
            self.JP.msgerro(janela=None,
                            texto_primario="Telas do sistema",
                            texto_secundario=problema_tl)
            exit(1)

        self.builder.connect_signals(self)
        self.w00 = self.builder.get_object("w00_principal")
        # self.w00.set_title("Controle de Solicitação de Taxi")
        # self.w00.maximize()
        self.w00.set_visible(True)
        self.w00.show_all()

        Gtk.main()
コード例 #2
0
    def __init__(self, **kwarg):

        self.ge_dic_param_sis = dict()
        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
コード例 #3
0
class PesqCondominio:

    def __init__(self, **kwarg):

        self.ge_dic_param_sis = dict()
        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)

    def pesquisar_condominios(self):
        """
        Faz a leitura de todos os condomínios cadastrados no banco
        :return: lista de dicionarios com todos os campos  por ordem de a01_nome
        """

        lst_dic = []
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute("""SELECT * FROM a01_condominio ORDER BY a01_nome ASC ;""")
        except psycopg2.Error as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
            return False

        try:
            registros = cur.fetchall()
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
            return False

        if not registros:
            lst_dic = []
            return lst_dic

        cur.close()
        conn.close()

        del conn, cur

        for registro in registros:
            lst_dic.append(dict(registro))

        return lst_dic
コード例 #4
0
class PesqCondominio:
    def __init__(self, **kwarg):

        self.ge_dic_param_sis = dict()
        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)

    def pesquisar_condominios(self):
        """
        Faz a leitura de todos os condomínios cadastrados no banco
        :return: lista de dicionarios com todos os campos  por ordem de a01_nome
        """

        lst_dic = []
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(
                """SELECT * FROM a01_condominio ORDER BY a01_nome ASC ;""")
        except psycopg2.Error as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
            return False

        try:
            registros = cur.fetchall()
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
            return False

        if not registros:
            lst_dic = []
            return lst_dic

        cur.close()
        conn.close()

        del conn, cur

        for registro in registros:
            lst_dic.append(dict(registro))

        return lst_dic
コード例 #5
0
    def __init__(self, **kwarg):

        self.ge_dic_param_sis = dict()
        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Pesquisa de Condomínio",
                            texto_secundario=msg)
            exit(1)
コード例 #6
0
    def __init__(self, **kwarg):

        # self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.col_cb02_a01_id_condominio = 0
        self.col_cb02_a01_nome = 1

        self.col_tv02_a02_id_condominio = 0
        self.col_tv02_a02_id_portaria = 1
        self.col_tv02_a02_nome_portaria = 2
        self.col_tv02_dados_portaria = 3

        self.JP = JanelaProblema()
        self.CBD = ComboBoxDados()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

            self.ge_selecionado = False

        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.builder = Gtk.Builder()
        try:
            self.Caminho = '/'.join([
                abspath(dirname(__file__)), 'glade',
                self.ge_dic_param_sis['AMBIENTE_TELA']
            ])
            self.builder.add_objects_from_file(self.Caminho, ["w02_portaria"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w02 = self.builder.get_object("w02_portaria")
        self.w02.set_title("Cadastro de Portaria")

        # ----------------------
        self.cb02_a02_id_condominio = self.builder.get_object(
            "cb02_a02_id_condominio")

        self.lst_cb02 = Gtk.ListStore(str, str)
        self.cb02_a02_id_condominio.set_model(self.lst_cb02)
        self.desenha_cb02(cb=self.cb02_a02_id_condominio, lista=self.lst_cb02)
        registros = self.PC.pesquisar_condominios()
        # registros = self.carregar_condominio()
        self.preencher_combo_condominio(lista=self.lst_cb02, res=registros)

        # --------------------------
        # self.set_dado_combo(combobox=self.cb02_a02_id_condominio,
        #                     text=1,
        #                     coluna=self.col_cb02_a01_id_condominio)
        # --------------------------

        self.l02_a02_nome_portaria = self.builder.get_object(
            "l02_a02_nome_portaria")
        self.l02_a02_nome_portaria.set_markup(
            "<b>{a}</b>".format(a=self.l02_a02_nome_portaria.get_text()))
        self.e02_a02_nome_portaria = self.builder.get_object(
            "e02_a02_nome_portaria")

        self.l02_a02_endereco = self.builder.get_object("l02_a02_endereco")
        self.l02_a02_endereco.set_markup(
            "{a}".format(a=self.l02_a02_endereco.get_text()))
        self.e02_a02_endereco = self.builder.get_object("e02_a02_endereco")

        self.l02_a02_numero = self.builder.get_object("l02_a02_numero")
        self.l02_a02_numero.set_markup(
            "{a}".format(a=self.l02_a02_numero.get_text()))
        self.e02_a02_numero = self.builder.get_object("e02_a02_numero")

        self.tv02_a02 = self.builder.get_object("tv02_a02")
        self.lst_tv02 = Gtk.ListStore(str, str, str, str)
        self.desenha_tv02(tv=self.tv02_a02)
        self.tv02_a02.set_model(self.lst_tv02)

        self.w02.set_visible(True)
        self.w02.show_all()
コード例 #7
0
class CadPortaria:
    def __init__(self, **kwarg):

        # self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.col_cb02_a01_id_condominio = 0
        self.col_cb02_a01_nome = 1

        self.col_tv02_a02_id_condominio = 0
        self.col_tv02_a02_id_portaria = 1
        self.col_tv02_a02_nome_portaria = 2
        self.col_tv02_dados_portaria = 3

        self.JP = JanelaProblema()
        self.CBD = ComboBoxDados()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

            self.ge_selecionado = False

        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.builder = Gtk.Builder()
        try:
            self.Caminho = '/'.join([
                abspath(dirname(__file__)), 'glade',
                self.ge_dic_param_sis['AMBIENTE_TELA']
            ])
            self.builder.add_objects_from_file(self.Caminho, ["w02_portaria"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w02 = self.builder.get_object("w02_portaria")
        self.w02.set_title("Cadastro de Portaria")

        # ----------------------
        self.cb02_a02_id_condominio = self.builder.get_object(
            "cb02_a02_id_condominio")

        self.lst_cb02 = Gtk.ListStore(str, str)
        self.cb02_a02_id_condominio.set_model(self.lst_cb02)
        self.desenha_cb02(cb=self.cb02_a02_id_condominio, lista=self.lst_cb02)
        registros = self.PC.pesquisar_condominios()
        # registros = self.carregar_condominio()
        self.preencher_combo_condominio(lista=self.lst_cb02, res=registros)

        # --------------------------
        # self.set_dado_combo(combobox=self.cb02_a02_id_condominio,
        #                     text=1,
        #                     coluna=self.col_cb02_a01_id_condominio)
        # --------------------------

        self.l02_a02_nome_portaria = self.builder.get_object(
            "l02_a02_nome_portaria")
        self.l02_a02_nome_portaria.set_markup(
            "<b>{a}</b>".format(a=self.l02_a02_nome_portaria.get_text()))
        self.e02_a02_nome_portaria = self.builder.get_object(
            "e02_a02_nome_portaria")

        self.l02_a02_endereco = self.builder.get_object("l02_a02_endereco")
        self.l02_a02_endereco.set_markup(
            "{a}".format(a=self.l02_a02_endereco.get_text()))
        self.e02_a02_endereco = self.builder.get_object("e02_a02_endereco")

        self.l02_a02_numero = self.builder.get_object("l02_a02_numero")
        self.l02_a02_numero.set_markup(
            "{a}".format(a=self.l02_a02_numero.get_text()))
        self.e02_a02_numero = self.builder.get_object("e02_a02_numero")

        self.tv02_a02 = self.builder.get_object("tv02_a02")
        self.lst_tv02 = Gtk.ListStore(str, str, str, str)
        self.desenha_tv02(tv=self.tv02_a02)
        self.tv02_a02.set_model(self.lst_tv02)

        self.w02.set_visible(True)
        self.w02.show_all()

    def on_b02_fechar_clicked(self, widget):
        """
        :param:
        :return:
        """
        # tela = widget.get_parent_window()
        # tela.destroy()
        # self.w02.destroy()
        self.w02.destroy()

    def on_b02_salvar_clicked(self, widget):
        """
        executa as rotina para salvar e validas os campos de tela
        :param:
        :return:
        """
        # dados_salvos = False
        dic_dados = self.validar_campos()
        if not dic_dados:
            return False

        if self.ge_selecionado:
            dados_salvos = self.alterar(dic_dados=dic_dados)
        else:
            dados_salvos = self.incluir(dic_dados=dic_dados)

        if dados_salvos:
            id_condominio = self.ge_id_condominio
            self.limpar_tela()
            self.ge_id_condominio = id_condominio
            res = self.pesquisar_portarias(id_condominio=self.ge_id_condominio)
            self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
        else:
            msg = "Problemas ao salvar informações"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)

    def on_b02_excluir_clicked(self, widget):
        """
        Apaga portaria selecionada
        :return:
        """

        apagado = False

        dic_dados = self.validar_campos()
        if not dic_dados:
            return False

        if self.ge_selecionado:
            apagado = self.apagar_portaria(
                id_portaria=dic_dados['a02_id_portaria'])
        else:
            msg = "Selecione uma portaria para apagar"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)

        if apagado:
            id_condominio = self.ge_id_condominio
            self.limpar_tela()
            res = self.pesquisar_portarias(id_condominio=id_condominio)
            self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
        else:
            msg = "Problemas ao Apagar Portaria"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

    def on_cb02_a02_id_condominio_changed(self, widget):
        """
        Prepara dados para ser mostrado no combobox bem como item selecionado do combo
        :param widget:
        :return:
        """
        try:
            id_condominio = self.CBD.get_dado_combo(
                comboboxm=widget, col_traz=self.col_cb02_a01_id_condominio)
            res = self.pesquisar_portarias(id_condominio=id_condominio)
            self.lst_tv02.clear()
            if res:
                self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
                self.ge_id_condominio = id_condominio

        except AttributeError:
            pass

    def validar_campos(self):
        """
        Validação dos campos para salvar no banco de e dados
        :return: Se retorna dic_dados = False então tem problemas nos dados
                 Se retorna dic_dados com valors em um dicionario em pode salvar no banco de dados
        """

        dic_dados = dict()

        valido = True
        numerovalido = re.compile(r'[0-9]')

        if self.ge_id_condominio == 0:
            valido = False
        else:
            dic_dados['a02_id_condominio'] = self.ge_id_condominio
            dic_dados['a02_id_portaria'] = self.ge_id_portaria

        if len(str(self.e02_a02_nome_portaria.get_text().strip())) == 0:
            dic_dados = {}
            self.e02_a02_nome_portaria.set_icon_from_icon_name(
                Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e02_a02_nome_portaria.grab_focus()
            valido = False
        else:
            dic_dados['a02_nome_portaria'] = str(
                self.e02_a02_nome_portaria.get_text().strip())
            self.e02_a02_nome_portaria.set_icon_from_icon_name(
                Gtk.EntryIconPosition.PRIMARY, None)

        if len(str(self.e02_a02_endereco.get_text().strip())) > 0:
            dic_dados['a02_endereco'] = str(
                self.e02_a02_endereco.get_text().strip())
        else:
            dic_dados['a02_endereco'] = None

        if len(str(self.e02_a02_numero.get_text().strip())) > 0:
            wcampo = numerovalido.sub('',
                                      self.e02_a02_numero.get_text().strip())
            if len(wcampo) > 0:
                dic_dados = {}
                self.e02_a02_numero.set_icon_from_icon_name(
                    Gtk.EntryIconPosition.PRIMARY, "dialog-error")

                self.e02_a02_numero.grab_focus()
                valido = False
            else:
                dic_dados['a02_numero'] = self.e02_a02_numero.get_text()
                self.e02_a02_numero.set_icon_from_icon_name(
                    Gtk.EntryIconPosition.PRIMARY, None)

        if valido is False:
            dic_dados = False

        return dic_dados

    def limpar_tela(self):
        """
        Limpeza de campos de tela e variaveis de trabalho
        """

        # self.ge_dic_dados = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.e02_a02_nome_portaria.set_text('')
        self.e02_a02_endereco.set_text('')
        self.e02_a02_numero.set_text('')

        self.e02_a02_nome_portaria.set_icon_from_icon_name(
            Gtk.EntryIconPosition.PRIMARY, None)
        self.e02_a02_endereco.set_icon_from_icon_name(
            Gtk.EntryIconPosition.PRIMARY, None)
        self.e02_a02_numero.set_icon_from_icon_name(
            Gtk.EntryIconPosition.PRIMARY, None)

    def alterar(self, dic_dados):
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            sql = """
                  UPDATE a02_portarias SET
                  a02_nome_portaria = %s,
                  a02_endereco = %s,
                  a02_numero = %s
                  WHERE a02_id_condominio = %s
                  AND a02_id_portaria = %s;
             """, (
                dic_dados['a02_nome_portaria']
                if "a02_nome_portaria" in dic_dados else None,
                dic_dados['a02_endereco']
                if "a02_endereco" in dic_dados else None,
                dic_dados['a02_numero'] if "a02_numero" in dic_dados else 0,
                dic_dados['a02_id_condominio']
                if "a02_id_condominio" in dic_dados else 0,
                dic_dados['a02_id_portaria']
                if "a02_id_portaria" in dic_dados else 0,
            )
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def incluir(self, dic_dados):
        """
         inclução dos dados no banco de dados
         retorna True caso a inclução no banco de dados seja bem sucedida
         returna False caso a inclução no banco dee dados seja mal sucedida

         :param dic_dados: dicionario de dados validos
         :return boolean:
         """

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        sql = """
             INSERT INTO a02_portarias
             (
             a02_id_condominio,
             a02_nome_portaria,
             a02_endereco,
             a02_numero
             ) VALUES(
             %s,
             %s,
             %s,
             %s
             );
             """, (
            dic_dados['a02_id_condominio']
            if "a02_id_condominio" in dic_dados else 0,
            dic_dados['a02_nome_portaria']
            if "a02_nome_portaria" in dic_dados else None,
            dic_dados['a02_endereco'] if "a02_endereco" in dic_dados else None,
            dic_dados['a02_numero'] if "a02_numero" in dic_dados else 0,
        )
        try:
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def apagar_portaria(self, id_portaria):
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            sql = """
             DELETE  from a02_portarias WHERE a02_id_portaria = %s;
             """, (id_portaria, )
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def mostrar_dados_tv02(self, lista, res):

        lista.clear()
        for i in res:
            lista.append([
                str(i['a02_id_condominio']),
                str(i['a02_id_portaria']),
                str(i['a02_nome_portaria']),
                str(i['dados_portaria']),
            ])

    def desenha_cb02(self, cb, lista):
        """
         DESENHA AS COLUNAS DO COMBO QUE IRÁ CONTER OS TIPOS DISPONIVEL
        :param cb:
        :param lista:
        :return:
        """
        cb.set_model(lista)
        cb.set_active(self.col_cb02_a01_id_condominio)

        cell_a01_id_condominio = Gtk.CellRendererText()
        cb.pack_start(cell_a01_id_condominio, True)
        cb.add_attribute(cell_a01_id_condominio, "text",
                         self.col_cb02_a01_id_condominio)
        cell_a01_id_condominio.set_visible(False)

        cell_a01_nome = Gtk.CellRendererText()
        cb.pack_start(cell_a01_nome, True)
        cb.add_attribute(cell_a01_nome, "text", self.col_cb02_a01_nome)
        cell_a01_nome.set_visible(True)

    def desenha_tv02(self, tv):

        tv.set_rules_hint(True)
        tv.set_grid_lines(3)

        # TV_PEN.set_has_tooltip(True)
        tv.set_property("headers-visible", True)

        cell_tv02_a02_id_condominio = Gtk.CellRendererText()
        col_tv02_a02_id_condominio = Gtk.TreeViewColumn(
            "ID.Condominio",
            cell_tv02_a02_id_condominio,
            text=self.col_tv02_a02_id_condominio)
        col_tv02_a02_id_condominio.set_visible(False)
        tv.append_column(col_tv02_a02_id_condominio)

        cell_tv02_a02_id_portaria = Gtk.CellRendererText()
        col_tv02_a02_id_portaria = Gtk.TreeViewColumn(
            "ID.Portaria",
            cell_tv02_a02_id_portaria,
            text=self.col_tv02_a02_id_portaria)
        col_tv02_a02_id_portaria.set_visible(False)
        tv.append_column(col_tv02_a02_id_portaria)

        cel_tv02_a02_nome_portaria = Gtk.CellRendererText()
        col_tv02_a02_nome_portaria = Gtk.TreeViewColumn(
            "Nome",
            cel_tv02_a02_nome_portaria,
            text=self.col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.set_visible(True)
        tv.append_column(col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.connect("clicked", self.clicado_col_tv02,
                                           tv, self.col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.set_reorderable(True)

        cel_tv02_dados_portaria = Gtk.CellRendererText()
        col_tv02_dados_portaria = Gtk.TreeViewColumn(
            "Endereço",
            cel_tv02_dados_portaria,
            text=self.col_tv02_dados_portaria)
        col_tv02_dados_portaria.set_visible(True)
        tv.append_column(col_tv02_dados_portaria)
        col_tv02_dados_portaria.connect("clicked", self.clicado_col_tv02, tv,
                                        self.col_tv02_dados_portaria)
        col_tv02_dados_portaria.set_reorderable(True)

        tv.set_enable_search(True)
        tv.set_headers_clickable(True)

    def clicado_col_tv02(self, widget, tv, coluna):
        """
        habilita pesquisa de tv
        """

        tv.set_enable_search(True)
        widget.set_sort_column_id(coluna)

        tv.set_search_column(coluna)

    def pesquisar_portarias(self, id_condominio=0):

        lst_dic_dados = []

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(
                """ select a02_id_condominio,
                                   a02_id_portaria,
                                   a02_nome_portaria,
                                   concat(a02_endereco, ', ', a02_numero) as dados_portaria
                            from a01_condominio, a02_portarias
                            WHERE a01_id_condominio = a02_portarias.a02_id_condominio
                            and a01_id_condominio = %s 
                            order by upper(a02_nome_portaria);
                            """, (id_condominio, ))
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        for registro in registros:
            lst_dic_dados.append(dict(registro))

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return lst_dic_dados

    def on_tv02_a02_key_press_event(self, widget, event):

        keyval = Gdk.keyval_name(event.keyval)
        if keyval == 'Return' or keyval == 'KP_Enter':

            selection = widget.get_selection()
            modelx, iterx = selection.get_selected()

            self.limpar_tela()

            try:
                id_condominio = str(
                    modelx.get_value(iterx, self.col_tv02_a02_id_condominio))
                id_portaria = str(
                    modelx.get_value(iterx, self.col_tv02_a02_id_portaria))
                self.ge_id_condominio = id_condominio
                self.ge_id_portaria = id_portaria
            except ValueError:
                return False
            finally:
                self.ge_selecionado = True

            dic_portaria = self.consulta_portaria(id_condominio=id_condominio,
                                                  id_portaria=id_portaria)

            if len(dic_portaria) != 0:
                self.mostrar_dados_tela(dic_portaria=dic_portaria)
                # self.ge_dic_dados = dic_portaria
                self.ge_selecionado = True
            else:
                self.limpar_tela()

    def preencher_combo_condominio(self, lista, res):

        lista.clear()

        for i in res:
            lista.append([
                str(i['a01_id_condominio']),
                str(i['a01_nome']) if i['a01_nome'] else None,
            ])

    def consulta_portaria(self, id_condominio, id_portaria):

        dic_dados = {}

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(
                """ SELECT *
                            FROM a02_portarias
                            WHERE  a02_id_condominio = %s
                            AND  a02_id_portaria = %s;
                            ;
                            """, (id_condominio, id_portaria))
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        for registro in registros:
            dic_dados = dict(registro)

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return dic_dados

    def mostrar_dados_tela(self, dic_portaria):

        for key, value in dic_portaria.items():
            if key == 'a02_nome_portaria':
                if value is not None:
                    self.e02_a02_nome_portaria.set_text(str(value))
                else:
                    self.e02_a02_nome_portaria.set_text('')

            if key == 'a02_endereco':
                if value is not None:
                    self.e02_a02_endereco.set_text(str(value))
                else:
                    self.e02_a02_endereco.set_text('')

            if key == 'a02_numero':
                if value > 0:
                    self.e02_a02_numero.set_text(str(value))
                else:
                    self.e02_a02_numero.set_text('')
コード例 #8
0
class MenuPrinc:
    def __init__(self):
        """
        Inicialisação dos campos no menu
        """
        self.problema = None
        self.JP = JanelaProblema()

        self.ge_dic_param_sis = dict()

        self.Pr = Parametros()
        self.ge_dic_param_sis = self.Pr.carrega_parametros()

        if not self.ge_dic_param_sis:
            self.problema = 'Dicionario de parametros vazio ou não localizado'
            logging.error(self.problema)
            self.JP.msgerro(janela=None,
                            texto_primario="Parametros",
                            texto_secundario=self.problema)
            exit(1)

        try:
            self.lg = LogSistema(dic_param_sis=self.ge_dic_param_sis)
        except IOError as problema_lg:
            logging.error(problema_lg)
            self.JP.msgerro(janela=None,
                            texto_primario="Log",
                            texto_secundario=problema_lg)
            exit(1)

        self.caminho_src = abspath(dirname(__file__))

        self.builder = Gtk.Builder()

        try:
            self.caminho_tela = '/'.join([
                self.caminho_src, 'glade',
                self.ge_dic_param_sis['AMBIENTE_TELA']
            ])
            self.builder.add_objects_from_file(self.caminho_tela,
                                               ["w00_principal"])
        except Exception as problema_tl:
            logging.error(problema_tl)
            self.JP.msgerro(janela=None,
                            texto_primario="Telas do sistema",
                            texto_secundario=problema_tl)
            exit(1)

        self.builder.connect_signals(self)
        self.w00 = self.builder.get_object("w00_principal")
        # self.w00.set_title("Controle de Solicitação de Taxi")
        # self.w00.maximize()
        self.w00.set_visible(True)
        self.w00.show_all()

        Gtk.main()

    def on_mnu_cad_condominio_activate(self, widget):
        """
        Chama o cadastro de condominios
        :param widget:
        :return:
        """

        titulo = widget.get_label().strip('_')
        CadCondominio(dic_param_sis=self.ge_dic_param_sis, titulo=titulo)

    def on_mnu_cad_portaria_activate(self, widget):
        """
        Chama o cadatro de portarias
        :param widget:
        :return:
        """

        titulo = widget.get_label().strip('_')
        CadPortaria(dic_param_sis=self.ge_dic_param_sis, titulo=titulo)

    def on_mnu_cad_bloco_activate(self, widget):
        """
        Chama o cadastro de blocos
        :param widget:
        :return:
        """

        titulo = widget.get_label().strip('_')
        CadBloco(dic_param_sis=self.ge_dic_param_sis, titulo=titulo)

    def on_w00_principal_delete_event(self):
        """
        Saida do sistema
        :return:
        """
        Gtk.main_quit()

    def on_w00_principal_destroy(self, widget):
        """
        Saida do sistema
        :return:
        """
        Gtk.main_quit()

    def on_w00_principal_destroy_event(self):
        """
        Saida do sistema
        :return:
        """
        Gtk.main_quit()
コード例 #9
0
ファイル: cadbloco.py プロジェクト: johndizaro/condominio
    def __init__(self, **kwarg):
        logging.info('entrei no cadbloco')

        #
        # rotina  para salvar em string  quem chamou e quem foi chamada
        #
        # import traceback
        # stack = traceback.extract_stack()
        # chamador_filename, chamador_codeline, chamador_funcName, chamador_text = stack[-2]
        # print(inspect.getframeinfo(inspect.currentframe())[2])
        # print(chamador_filename, chamador_codeline, chamador_funcName, chamador_text)
        # chamado_filename, chamado_codeline, chamado_funcName, chamado_text = stack[-1]
        # print(inspect.getframeinfo(inspect.currentframe())[2])
        # print(chamado_filename, chamado_codeline, chamado_funcName, chamado_text)

        self.col_a01_id_condominio = 0
        self.col_a01_nome = 1

        self.col_a03_id_condominio = 0
        self.col_a03_id_bloco = 1
        self.col_a03_nome_bloco = 2

        self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False
        self.ge_titulo = None

        self.ge_a03_id_bloco = 0

        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)

            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        if kwarg['titulo']:
            self.ge_titulo = kwarg['titulo']
        else:
            msg = 'Esta faltando o parametro Título do sistema'
            logging.error(msg)

            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        self.CBD = ComboBoxDados()
        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.PB = PesqBloco(dic_param_sis=self.ge_dic_param_sis)

        self.ge_a01_id_condominio = None
        self.ge_selecionado = False

        self.builder = Gtk.Builder()
        try:
            self.caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])
            self.builder.add_objects_from_file(self.caminho, ["w03_bloco"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w03 = self.builder.get_object("w03_bloco")
        self.w03.set_title(self.ge_titulo)

        self.l03_a03_id_condominio = self.builder.get_object("l03_a03_id_condominio")
        self.l03_a03_id_condominio.set_markup("<b>{a}</b>".format(a=self.l03_a03_id_condominio.get_text()))
        self.cb03_a03_id_condominio = self.builder.get_object("cb03_a03_id_condominio")

        # PREPARAÇÃO DO cb03_a03_id_condominio
        self.lst_cb03_a03_id_condominio = Gtk.ListStore(str, str)
        self.desenha_cb03_a03_id_condominio(cb=self.cb03_a03_id_condominio, lista=self.lst_cb03_a03_id_condominio)
        registros = self.PC.pesquisar_condominios()
        self.preencher_combo_condominio(lista=self.lst_cb03_a03_id_condominio, lst_dic_condominio=registros)
        # ----------------------

        self.l03_e03_a03_nome_bloco = self.builder.get_object("l03_e03_a03_nome_bloco")
        self.l03_e03_a03_nome_bloco.set_markup("<b>{a}</b>".format(a=self.l03_e03_a03_nome_bloco.get_text()))
        self.e03_a03_nome_bloco = self.builder.get_object("e03_a03_nome_bloco")

        # PREPARAÇÃO DO TREEVIEW
        self.tv03_a03 = self.builder.get_object("tv03_a03")

        self.lst_tv03 = Gtk.ListStore(str, str, str)
        self.tv03_a03.set_model(self.lst_tv03)
        self.desenha_tv03(tv=self.tv03_a03)
        # res = self.pesquisar_bloco()
        # self.preencher_bloco(lista=self.lst_tv03, res=res)
        # -------------------------------------------------------------------

        self.w03.set_visible(True)
        self.w03.show_all()
コード例 #10
0
ファイル: cadbloco.py プロジェクト: johndizaro/condominio
class CadBloco:
    def __init__(self, **kwarg):
        logging.info('entrei no cadbloco')

        #
        # rotina  para salvar em string  quem chamou e quem foi chamada
        #
        # import traceback
        # stack = traceback.extract_stack()
        # chamador_filename, chamador_codeline, chamador_funcName, chamador_text = stack[-2]
        # print(inspect.getframeinfo(inspect.currentframe())[2])
        # print(chamador_filename, chamador_codeline, chamador_funcName, chamador_text)
        # chamado_filename, chamado_codeline, chamado_funcName, chamado_text = stack[-1]
        # print(inspect.getframeinfo(inspect.currentframe())[2])
        # print(chamado_filename, chamado_codeline, chamado_funcName, chamado_text)

        self.col_a01_id_condominio = 0
        self.col_a01_nome = 1

        self.col_a03_id_condominio = 0
        self.col_a03_id_bloco = 1
        self.col_a03_nome_bloco = 2

        self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False
        self.ge_titulo = None

        self.ge_a03_id_bloco = 0

        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)

            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        if kwarg['titulo']:
            self.ge_titulo = kwarg['titulo']
        else:
            msg = 'Esta faltando o parametro Título do sistema'
            logging.error(msg)

            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        self.CBD = ComboBoxDados()
        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.PB = PesqBloco(dic_param_sis=self.ge_dic_param_sis)

        self.ge_a01_id_condominio = None
        self.ge_selecionado = False

        self.builder = Gtk.Builder()
        try:
            self.caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])
            self.builder.add_objects_from_file(self.caminho, ["w03_bloco"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w03 = self.builder.get_object("w03_bloco")
        self.w03.set_title(self.ge_titulo)

        self.l03_a03_id_condominio = self.builder.get_object("l03_a03_id_condominio")
        self.l03_a03_id_condominio.set_markup("<b>{a}</b>".format(a=self.l03_a03_id_condominio.get_text()))
        self.cb03_a03_id_condominio = self.builder.get_object("cb03_a03_id_condominio")

        # PREPARAÇÃO DO cb03_a03_id_condominio
        self.lst_cb03_a03_id_condominio = Gtk.ListStore(str, str)
        self.desenha_cb03_a03_id_condominio(cb=self.cb03_a03_id_condominio, lista=self.lst_cb03_a03_id_condominio)
        registros = self.PC.pesquisar_condominios()
        self.preencher_combo_condominio(lista=self.lst_cb03_a03_id_condominio, lst_dic_condominio=registros)
        # ----------------------

        self.l03_e03_a03_nome_bloco = self.builder.get_object("l03_e03_a03_nome_bloco")
        self.l03_e03_a03_nome_bloco.set_markup("<b>{a}</b>".format(a=self.l03_e03_a03_nome_bloco.get_text()))
        self.e03_a03_nome_bloco = self.builder.get_object("e03_a03_nome_bloco")

        # PREPARAÇÃO DO TREEVIEW
        self.tv03_a03 = self.builder.get_object("tv03_a03")

        self.lst_tv03 = Gtk.ListStore(str, str, str)
        self.tv03_a03.set_model(self.lst_tv03)
        self.desenha_tv03(tv=self.tv03_a03)
        # res = self.pesquisar_bloco()
        # self.preencher_bloco(lista=self.lst_tv03, res=res)
        # -------------------------------------------------------------------

        self.w03.set_visible(True)
        self.w03.show_all()

        #
        # curframe = inspect.currentframe()
        # print('--->', curframe.f_lineno)
        #
        # (frame, filename, line_number,function_name, lines, index) = inspect.getouterframes(inspect.currentframe())[1]
        # print('1->',frame, '\n1->',filename, '\n1->',line_number, '\n1->',function_name, '\n1->',lines, '\n1->',index)
        #
        # calframe = inspect.getouterframes(curframe, 2)
        # print(calframe)
        #
        # print('caller name:', calframe[1][3])

    def desenha_tv03(self, tv):
        """
        desenha as colunas do treeview
        :param tv:recebe o objeto do treeview
        :return:
        """

        tv.set_rules_hint(True)
        tv.set_grid_lines(3)

        # TV_PEN.set_has_tooltip(True)
        tv.set_property("headers-visible", True)

        cell_tv03_a03_id_condominio = Gtk.CellRendererText()
        col_tv03_a03_id_condominio = Gtk.TreeViewColumn("ID.Condominio",
                                                        cell_tv03_a03_id_condominio,
                                                        text=self.col_a03_id_condominio)
        col_tv03_a03_id_condominio.set_visible(False)
        tv.append_column(col_tv03_a03_id_condominio)

        cell_tv03_a03_id_bloco = Gtk.CellRendererText()
        col_tv03_col_a03_id_bloco = Gtk.TreeViewColumn("ID.Bloco",
                                                       cell_tv03_a03_id_bloco,
                                                       text=self.col_a03_id_bloco)
        col_tv03_col_a03_id_bloco.set_visible(False)
        tv.append_column(col_tv03_col_a03_id_bloco)

        cell_tv03_a03_nome_bloco = Gtk.CellRendererText()
        col_tv03_col_a03_nome_bloco = Gtk.TreeViewColumn("ID.Bloco",
                                                         cell_tv03_a03_nome_bloco,
                                                         text=self.col_a03_nome_bloco)
        col_tv03_col_a03_nome_bloco.set_visible(True)
        tv.append_column(col_tv03_col_a03_nome_bloco)

        tv.set_enable_search(True)
        tv.set_headers_clickable(True)

    def desenha_cb03_a03_id_condominio(self, cb, lista):
        """
        Desenha as colunas do cb03_a03_id_condomini
        :param cb: combobox
        :param lista: liststore definição das colunas
        :return:
        """
        cb.set_model(lista)
        cb.set_active(self.col_a01_id_condominio)

        cell_a01_id_condominio = Gtk.CellRendererText()
        cb.pack_start(cell_a01_id_condominio, True)
        cb.add_attribute(cell_a01_id_condominio, "text", self.col_a01_id_condominio)
        cell_a01_id_condominio.set_visible(False)

        cell_a01_nome = Gtk.CellRendererText()
        cb.pack_start(cell_a01_nome, True)
        cb.add_attribute(cell_a01_nome, "text", self.col_a01_nome)
        cell_a01_nome.set_visible(True)

    def preencher_combo_condominio(self, lista, lst_dic_condominio):
        """
        Colocra as informações nas colunas determinadas
        :param lista: definição das coluna para preencher
        :param lst_dic_condominio:
        :return:
        """
        lista.clear()

        for i in lst_dic_condominio:
            lista.append([
                str(i['a01_id_condominio']),
                str(i['a01_nome']) if i['a01_nome'] else None,
            ])

    def on_b03_fechar_clicked(self, widget):
        """
        libera o CadBloco - apagar da tela
        :param:
        :return:
        """
        tela = widget.get_parent_window()
        tela.destroy()
        # self.w03.destroy()

    def on_b03_salvar_clicked(self, widget):
        """
        Manda executar a validação dos campos da tela bem como verifica se
        os dados devem ser alterados ou incluidos
        :param:
        :return:
        """

        dic_dados = self.validar_campos()
        if not dic_dados:
            return False

        if dic_dados:
            if self.ge_selecionado:
                dados_salvo = self.alterar(dic_dados=dic_dados)
            else:
                dados_salvo = self.incluir(dic_dados=dic_dados)
            if dados_salvo:
                self.limpar_tela()
                res = self.PB.pesquisar_blocos(id_condominio=self.ge_a01_id_condominio)
                self.mostrar_dados_tv03(lista=self.lst_tv03, res=res)
        else:
            msg = "Problemas ao Dicionário não encontrado"
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            exit(1)

    def on_cb03_a03_id_condominio_changed(self, widget):
        """
        verifica qual opção do combobox foi selecionado
        :param widget:
        :return:
        """

        try:
            self.ge_a01_id_condominio = self.CBD.get_dado_combo(comboboxm=widget,
                                                                col_traz=self.col_a01_id_condominio)

            res = self.PB.pesquisar_blocos(id_condominio=self.ge_a01_id_condominio)
            if res:
                self.mostrar_dados_tv03(lista=self.lst_tv03, res=res)

        except ValueError:
            pass

    def on_tv03_a03_key_press_event(self, widget, event):

        keyval = Gdk.keyval_name(event.keyval)
        if keyval == 'Return' or keyval == 'KP_Enter':

            selection = widget.get_selection()
            modelx, iterx = selection.get_selected()

            self.limpar_tela()

            try:
                id_bloco = str(modelx.get_value(iterx, self.col_a03_id_bloco))
                self.ge_a03_id_bloco = id_bloco

            except ValueError:
                self.ge_selecionado = True
                return False
            finally:
                self.ge_selecionado = True

            dic_bloco = self.consulta_bloco(id_bloco=id_bloco)

            if len(dic_bloco) != 0:
                self.mostrar_dados_tela(dic_dados_bloco=dic_bloco)
                self.ge_selecionado = True

            else:
                self.limpar_tela()

    def mostrar_dados_tv03(self, lista, res):
        """
        Coloca os dados recebidos em 'res'
        :param lista:
        :param res:lista de dicionarios com os dados do bloco para ser encaixado no treeview
        :return:
        """

        lista.clear()
        for i in res:
            lista.append([
                str(i['a03_id_condominio']),
                str(i['a03_id_bloco']),
                str(i['a03_nome_bloco']),
            ])

    def limpar_tela(self):
        """
        Limpar todos os campo para que da classe bem como as entradas da tela
        :return:
        """

        self.ge_selecionado = False
        self.ge_a03_id_bloco = 0

        self.e03_a03_nome_bloco.set_text('')

        self.e03_a03_nome_bloco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

    def validar_campos(self):
        """
        Valida todos os campos
        :return:retrna um dicionario de dados com os dados validados ou retorna Falso no caso de dados inválidos
        """
        dic_dados = dict()

        valido = True
        # numerovalido = re.compile(r'[0-9]')

        dic_dados['a03_id_bloco'] = self.ge_a03_id_bloco
        dic_dados['a03_id_condominio'] = self.ge_a01_id_condominio

        if len(str(self.e03_a03_nome_bloco.get_text().strip())) == 0:
            self.e03_a03_nome_bloco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e03_a03_nome_bloco.grab_focus()
            valido = False
        else:
            dic_dados['a03_nome_bloco'] = str(self.e03_a03_nome_bloco.get_text().strip())
            self.e03_a03_nome_bloco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

        if not valido:
            dic_dados = False

        return dic_dados

    def incluir(self, dic_dados):
        """
        Incluir novos blocos no banco de dados
        :param dic_dados: dicionario de dados validados para salvar no banco de dados
        :return: retorn Falso quando não foi possivel salvar e True quando foi ṕossivel salvar os dados
        """

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            texto_primario="Problema na rotina de Incluir",
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            cur.execute(
                """
             INSERT INTO a03_blocos
             (
             a03_id_condominio,
             a03_nome_bloco
             ) VALUES(
             %s,
             %s
             );
             """, (
                    dic_dados['a03_id_condominio'] if "a03_id_condominio" in dic_dados else 0,
                    dic_dados['a03_nome_bloco'] if "a03_nome_bloco" in dic_dados else None,
                )
            )
        except (psycopg2.DatabaseError, psycopg2.ProgrammingError) as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            texto_primario='Problma ao Incluir dados novos',
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def alterar(self, dic_dados):
        """

        :param dic_dados:
        :return:
        """
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            texto_primario='Problema ao Alterar Dados',
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            cur.execute("""
            UPDATE  a03_blocos SET
            a03_id_condominio = %s,
            a03_nome_bloco = %s
            WHERE a03_id_bloco = %s;
            """, (
                dic_dados['a03_id_condominio'] if "a03_id_condominio" in dic_dados else '0',
                dic_dados['a03_nome_bloco'] if "a03_nome_bloco" in dic_dados else None,
                dic_dados['a03_id_bloco'] if "a03_id_bloco" in dic_dados else '0',
            )
                        )

        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            texto_primario='Problema ao Atualisar dados',
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def consulta_bloco(self, id_bloco):

        dic_dados = {}

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(""" SELECT *
                            from a03_blocos
                            WHERE a03_id_bloco = %s;
                            """, (id_bloco,)
                        )
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w03,
                            texto_primario='Problemas ao Carregar Blocos',
                            # texto_primario="class:{} - def:{} - linha:{}".format(str(self.__class__.__name__),
                            #                                                      str(sys._getframe(0).f_code.co_name),
                            #                                                      str(sys._getframe(0).f_lineno)),
                            texto_secundario=msg)
            return False

        for registro in registros:
            dic_dados = dict(registro)

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return dic_dados

    def mostrar_dados_tela(self, dic_dados_bloco):

        for key, value in dic_dados_bloco.items():
            if key == 'a03_nome_bloco':
                if value is not None:
                    self.e03_a03_nome_bloco.set_text(str(value))
                else:
                    self.e03_a03_nome_bloco.set_text('')
コード例 #11
0
    def __init__(self, **kwarg):

        self.col_a01_id_condominio = 0
        self.col_a01_nome = 1
        self.col_a01_endereco = 2
        self.col_a01_numero = 3
        self.col_a01_bairro = 4
        self.col_a01_cidade = 5

        self.ge_dic_dados = dict()
        # self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_a01_id_condominio = None

        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario="PARAMETROS", texto_secundario=msg)
            exit(1)

        if kwarg['titulo']:
            self.ge_titulo = kwarg['titulo']
        else:
            msg = 'Esta faltando titulo da tela'
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario="PARAMETROS", texto_secundario=msg)
            exit(1)

        self.builder = Gtk.Builder()
        try:
            self.caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])

            self.builder.add_objects_from_file(self.caminho, ["w01_condominio"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario=self.ge_titulo, texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w01 = self.builder.get_object("w01_condominio")
        self.w01.set_title("Cadastro de Condiminio")

        self.l01_a01_nome = self.builder.get_object("l01_a01_nome")
        self.l01_a01_nome.set_markup("<b>{a}</b>".format(a=self.l01_a01_nome.get_text()))
        self.e01_a01_nome = self.builder.get_object("e01_a01_nome")

        self.l01_a01_endereco = self.builder.get_object("l01_a01_endereco")
        self.l01_a01_endereco.set_markup("<b>{a}</b>".format(a=self.l01_a01_endereco.get_text()))
        self.e01_a01_endereco = self.builder.get_object("e01_a01_endereco")

        self.l01_a01_numero = self.builder.get_object("l01_a01_numero")
        self.l01_a01_numero.set_markup("<b>{a}</b>".format(a=self.l01_a01_numero.get_text()))
        self.e01_a01_numero = self.builder.get_object("e01_a01_numero")

        self.l01_a01_bairro = self.builder.get_object('l01_a01_bairro')
        self.l01_a01_bairro.set_markup("<b>{a}</b>".format(a=self.l01_a01_bairro.get_text()))
        self.e01_a01_bairro = self.builder.get_object('e01_a01_bairro')

        self.l01_a01_cidade = self.builder.get_object('l01_a01_cidade')
        self.l01_a01_cidade.set_markup("<b>{a}</b>".format(a=self.l01_a01_cidade.get_text()))
        self.e01_a01_cidade = self.builder.get_object('e01_a01_cidade')

        self.b01_excluir = self.builder.get_object('b01_excluir')

        # PREPARAÇÃO DO TREEVIEW
        self.tv01_a01 = self.builder.get_object("tv01_a01")

        self.lst_tv01 = Gtk.ListStore(str, str, str)
        self.tv01_a01.set_model(self.lst_tv01)
        self.desenha_tv01(tv=self.tv01_a01)
        res = self.pesquisar_condominio()
        if res:
            self.preencher_condominio(lista=self.lst_tv01, res=res)
        # -------------------------------------------------------------------

        self.w01.set_visible(True)
        self.w01.show_all()
コード例 #12
0
class CadCondominio:
    def __init__(self, **kwarg):

        self.col_a01_id_condominio = 0
        self.col_a01_nome = 1
        self.col_a01_endereco = 2
        self.col_a01_numero = 3
        self.col_a01_bairro = 4
        self.col_a01_cidade = 5

        self.ge_dic_dados = dict()
        # self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_a01_id_condominio = None

        self.JP = JanelaProblema()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario="PARAMETROS", texto_secundario=msg)
            exit(1)

        if kwarg['titulo']:
            self.ge_titulo = kwarg['titulo']
        else:
            msg = 'Esta faltando titulo da tela'
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario="PARAMETROS", texto_secundario=msg)
            exit(1)

        self.builder = Gtk.Builder()
        try:
            self.caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])

            self.builder.add_objects_from_file(self.caminho, ["w01_condominio"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None, texto_primario=self.ge_titulo, texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w01 = self.builder.get_object("w01_condominio")
        self.w01.set_title("Cadastro de Condiminio")

        self.l01_a01_nome = self.builder.get_object("l01_a01_nome")
        self.l01_a01_nome.set_markup("<b>{a}</b>".format(a=self.l01_a01_nome.get_text()))
        self.e01_a01_nome = self.builder.get_object("e01_a01_nome")

        self.l01_a01_endereco = self.builder.get_object("l01_a01_endereco")
        self.l01_a01_endereco.set_markup("<b>{a}</b>".format(a=self.l01_a01_endereco.get_text()))
        self.e01_a01_endereco = self.builder.get_object("e01_a01_endereco")

        self.l01_a01_numero = self.builder.get_object("l01_a01_numero")
        self.l01_a01_numero.set_markup("<b>{a}</b>".format(a=self.l01_a01_numero.get_text()))
        self.e01_a01_numero = self.builder.get_object("e01_a01_numero")

        self.l01_a01_bairro = self.builder.get_object('l01_a01_bairro')
        self.l01_a01_bairro.set_markup("<b>{a}</b>".format(a=self.l01_a01_bairro.get_text()))
        self.e01_a01_bairro = self.builder.get_object('e01_a01_bairro')

        self.l01_a01_cidade = self.builder.get_object('l01_a01_cidade')
        self.l01_a01_cidade.set_markup("<b>{a}</b>".format(a=self.l01_a01_cidade.get_text()))
        self.e01_a01_cidade = self.builder.get_object('e01_a01_cidade')

        self.b01_excluir = self.builder.get_object('b01_excluir')

        # PREPARAÇÃO DO TREEVIEW
        self.tv01_a01 = self.builder.get_object("tv01_a01")

        self.lst_tv01 = Gtk.ListStore(str, str, str)
        self.tv01_a01.set_model(self.lst_tv01)
        self.desenha_tv01(tv=self.tv01_a01)
        res = self.pesquisar_condominio()
        if res:
            self.preencher_condominio(lista=self.lst_tv01, res=res)
        # -------------------------------------------------------------------

        self.w01.set_visible(True)
        self.w01.show_all()

    def on_tv01_a01_key_press_event(self, widget, event):

        keyval = Gdk.keyval_name(event.keyval)
        if keyval == 'Return' or keyval == 'KP_Enter':

            selection = widget.get_selection()
            modelx, iterx = selection.get_selected()

            self.limpar_tela()

            try:
                id_condominio = str(modelx.get_value(iterx, self.col_a01_id_condominio))
                self.ge_a01_id_condominio = id_condominio
            except ValueError:
                return False
            finally:
                self.ge_selecionado = True
                self.b01_excluir.set_sensitive(True)

            dic_condominio = self.consulta_condominio(id_condominio=id_condominio)

            if len(dic_condominio) != 0:
                self.mostrar_dados(dic_dados=dic_condominio)
                self.ge_dic_dados = dic_condominio
                self.ge_selecionado = True
            else:
                self.limpar_tela()

    def on_b01_fechar_clicked(self, button):

        tela = button.get_parent_window()
        tela.destroy()

    def on_b01_exluir_clicked(self, button):

        button.set_sensitive(True)

        if not self.ge_selecionado:
            msg = "Você deverá selecionar o condomínio antes de exclui-lo"
            self.JP.msgwarning(janela=self.w01, texto_primario="ATENÇÃO", texto_secundario=msg)
            return False

        msg = "Deseja realmente apagar todas as informações deste Condominio?" \
              "Cuidado isto não tem volta a menos que suas copias de segurança estejam em dia."
        resposta = self.JP.msgquestion(janela=self.w01, texto_primario="Excluir condomínio", texto_secundario=msg)

        if resposta:
            self.apagar(id_condominio=self.ge_dic_dados['a01_id_condominio'])
            res = self.pesquisar_condominio()
            self.preencher_condominio(lista=self.lst_tv01, res=res)
            self.limpar_tela()

        self.e01_a01_nome.grab_focus()

    def on_b01_salvar_clicked(self, button):

        button.set_sensitive(True)

        if not self.validar_campos():
            return False

        if self.ge_selecionado:
            dados_salvo = self.alterar(dic_dados=self.ge_dic_dados)
        else:
            dados_salvo = self.incluir(dic_dados=self.ge_dic_dados)

        if dados_salvo:
            self.limpar_tela()
            res = self.pesquisar_condominio()
            self.preencher_condominio(lista=self.lst_tv01, res=res)
        else:
            msg = "Problemas ao salvar informações"
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo)
            exit(1)
        self.e01_a01_nome.grab_focus()

    def apagar(self, id_condominio):
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except (psycopg2.ProgrammingError, psycopg2.OperationalError) as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            cur.execute(
                """
             DELETE  FROM  a01_condominio WHERE a01_id_condominio = %s;
             """, (
                    id_condominio,
                )
            )
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def limpar_tela(self):
        """
        Limpeza de campos de tela e variaveis de trabalho
        """

        self.ge_selecionado = False
        self.ge_dic_dados = {}
        self.ge_a01_id_condominio = None

        self.e01_a01_nome.set_text('')
        self.e01_a01_bairro.set_text('')
        self.e01_a01_cidade.set_text('')
        self.e01_a01_endereco.set_text('')
        self.e01_a01_numero.set_text('')

        self.e01_a01_nome.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e01_a01_bairro.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e01_a01_cidade.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e01_a01_endereco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e01_a01_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

    def validar_campos(self):

        """
        Validar campos para salvar no banco de dados
        retorna True para valido
        retorna False para invalido
        :return: boolean
        """
        valido = True
        numerovalido = re.compile(r'[0-9]')

        self.ge_dic_dados['a01_id_condominio'] = self.ge_a01_id_condominio

        if len(str(self.e01_a01_nome.get_text().strip())) == 0:
            self.ge_dic_dados = {}
            self.e01_a01_nome.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e01_a01_nome.grab_focus()
            valido = False
        else:
            self.ge_dic_dados['e01_a01_nome'] = str(self.e01_a01_nome.get_text().strip())
            self.e01_a01_nome.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "")

        if len(str(self.e01_a01_endereco.get_text().strip())) == 0:
            self.ge_dic_dados = {}
            self.e01_a01_endereco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e01_a01_endereco.grab_focus()
            valido = False
        else:
            self.ge_dic_dados['e01_a01_endereco'] = str(self.e01_a01_endereco.get_text().strip())
            self.e01_a01_endereco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "")

        if len(str(self.e01_a01_bairro.get_text().strip())) == 0:
            self.ge_dic_dados = {}
            self.e01_a01_bairro.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e01_a01_bairro.grab_focus()
            valido = False
        else:
            self.ge_dic_dados['e01_a01_bairro'] = str(self.e01_a01_bairro.get_text().strip())
            self.e01_a01_bairro.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "")

        if len(str(self.e01_a01_cidade.get_text().strip())) == 0:
            self.ge_dic_dados = {}
            self.e01_a01_cidade.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e01_a01_cidade.grab_focus()
            valido = False
        else:
            self.ge_dic_dados['e01_a01_cidade'] = str(self.e01_a01_cidade.get_text().strip())
            self.e01_a01_cidade.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "")

        wcampo = numerovalido.sub('', self.e01_a01_numero.get_text().strip())
        if len(wcampo) > 0 or self.e01_a01_numero.get_text() == "":
            self.ge_dic_dados = {}
            self.e01_a01_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e01_a01_numero.grab_focus()
            valido = False
        else:
            self.ge_dic_dados['e01_a01_numero'] = self.e01_a01_numero.get_text()
            self.e01_a01_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "")

        return valido

    def consulta_condominio(self, id_condominio):

        dic_dados = {}

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(""" SELECT *
                            FROM  a01_condominio
                            WHERE a01_id_condominio = %s;
                            """, (id_condominio,)
                        )
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        for registro in registros:
            dic_dados = dict(registro)

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return dic_dados

    def alterar(self, dic_dados):
        """
        Alteração dos dados no banco de dados
        retorna True caso a alteração no bano de dados seja bem sucedida
        returna False caso a alteração no bano dee dados seja mal sucidida

        :param dic_dados: dicionario de dados validos
        :return boolean:
        """
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            cur.execute("""
             UPDATE a01_condominio SET
             a01_nome = %s,
             a01_endereco = %s,
             a01_numero = %s,
             a01_cidade = %s,
             a01_bairro = %s
             WHERE a01_id_condominio = %s;
             """, (
                str(dic_dados['e01_a01_nome']),
                str(dic_dados['e01_a01_endereco']),
                str(dic_dados['e01_a01_numero']),
                str(dic_dados['e01_a01_cidade']),
                str(dic_dados['e01_a01_bairro']),
                str(dic_dados['a01_id_condominio']),
            )
                        )

        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def incluir(self, dic_dados):
        """
         inclução dos dados no banco de dados
         retorna True caso a inclução no banco de dados seja bem sucedida
         returna False caso a inclução no banco dee dados seja mal sucidida

         :param dic_dados: dicionario de dados validos
         :return boolean:
         """

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            cur.execute(
                """
             INSERT INTO a01_condominio
             (
             a01_nome,
             a01_endereco,
             a01_numero,
             a01_cidade,
             a01_bairro
             ) VALUES(
             %s,
             %s,
             %s,
             %s,
             %s
             );
             """, (
                    dic_dados['e01_a01_nome'],
                    dic_dados['e01_a01_endereco'],
                    dic_dados['e01_a01_numero'],
                    dic_dados['e01_a01_cidade'],
                    dic_dados['e01_a01_bairro']
                    # dic_motorista['t03_rt'] if "t03_rt" in dic_motorista else '0'
                )
            )
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def mostrar_dados(self, dic_dados):
        """
        Mostra as informações na tela  com informaçãos ou limpando os campos
        :param dic_dados:dicionário com dados carregados do banco de dados
        :return:
        """

        if 'a01_nome' in dic_dados.keys():
            self.e01_a01_nome.set_text(str(dic_dados['a01_nome']))
        else:
            self.e01_a01_nome.set_text('')

        if 'a01_endereco' in dic_dados.keys():
            self.e01_a01_endereco.set_text(str(dic_dados['a01_endereco']))
        else:
            self.e01_a01_endereco.set_text('')

        if 'a01_numero' in dic_dados.keys():
            if int(dic_dados['a01_numero']) > 0:
                self.e01_a01_numero.set_text(str(dic_dados['a01_numero']))
            else:
                self.e01_a01_numero.set_text('')
        else:
            self.e01_a01_numero.set_text('')

        if 'a01_bairro' in dic_dados.keys():
            if str(dic_dados['a01_bairro']) is not None:
                self.e01_a01_bairro.set_text(str(dic_dados['a01_bairro']))
            else:
                self.e01_a01_bairro.set_text('')
        else:
            self.e01_a01_bairro.set_text('')

        if 'a01_cidade' in dic_dados.keys():
            if str(dic_dados['a01_cidade']) is not None:
                self.e01_a01_cidade.set_text(str(dic_dados['a01_cidade']))
            else:
                self.e01_a01_cidade.set_text('')
        else:
            self.e01_a01_cidade.set_text('')

    def desenha_tv01(self, tv):
        """
        Desenha treeview inclui as colunas de informações
        :param tv:
        :return:
        """

        tv.set_rules_hint(True)
        tv.set_grid_lines(3)

        # TV_PEN.set_has_tooltip(True)
        tv.set_property("headers-visible", True)

        cell_tv01_a01_id_condominio = Gtk.CellRendererText()
        col_a01_id_condominio = Gtk.TreeViewColumn("ID.Condominio", cell_tv01_a01_id_condominio,
                                                   text=self.col_a01_id_condominio)
        col_a01_id_condominio.set_visible(False)
        tv.append_column(col_a01_id_condominio)

        cel_tv01_a01_nome = Gtk.CellRendererText()
        col_01_a01_nome = Gtk.TreeViewColumn("Nome", cel_tv01_a01_nome, text=self.col_a01_nome)
        col_01_a01_nome.set_visible(True)
        tv.append_column(col_01_a01_nome)
        col_01_a01_nome.connect("clicked", self.clicado_col_tv01, tv, self.col_a01_nome)
        col_01_a01_nome.set_reorderable(True)

        cel_tv01_a01_endereco = Gtk.CellRendererText()
        col_a01_endereco = Gtk.TreeViewColumn("Endereço", cel_tv01_a01_endereco, text=self.col_a01_endereco)
        col_a01_endereco.set_visible(True)
        tv.append_column(col_a01_endereco)
        col_a01_endereco.connect("clicked", self.clicado_col_tv01, tv, self.col_a01_endereco)
        col_a01_endereco.set_reorderable(True)

        tv.set_enable_search(True)
        tv.set_headers_clickable(True)

    def clicado_col_tv01(self, widget, tv, coluna):

        tv.set_enable_search(True)
        widget.set_sort_column_id(coluna)

        tv.set_search_column(coluna)

    def pesquisar_condominio(self):

        lst_dic_dados = []

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(""" SELECT a01_id_condominio,
                                   a01_nome,
                                   concat(a01_endereco, ',',
                                   a01_numero, ', ',
                                   a01_bairro, ', ',
                                   a01_cidade ) as end_completo
                            FROM  a01_condominio ORDER BY UPPER(a01_nome);
                            """
                        )
            registros = cur.fetchall()

        except (psycopg2.ProgrammingError, psycopg2.OperationalError) as msg:
            logging.error(msg)
            self.JP.msgerro(janela=self.w01, texto_primario=self.ge_titulo, texto_secundario=msg)
            return False

        for registro in registros:
            lst_dic_dados.append(dict(registro))

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return lst_dic_dados

    def preencher_condominio(self, lista, res):

        lista.clear()
        for i in res:
            lista.append([
                str(i['a01_id_condominio']),
                str(i['a01_nome']),
                str(i['end_completo']),
            ])
コード例 #13
0
ファイル: cadportaria.py プロジェクト: johndizaro/condominio
    def __init__(self, **kwarg):

        # self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.col_cb02_a01_id_condominio = 0
        self.col_cb02_a01_nome = 1

        self.col_tv02_a02_id_condominio = 0
        self.col_tv02_a02_id_portaria = 1
        self.col_tv02_a02_nome_portaria = 2
        self.col_tv02_dados_portaria = 3

        self.JP = JanelaProblema()
        self.CBD = ComboBoxDados()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

            self.ge_selecionado = False

        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.builder = Gtk.Builder()
        try:
            self.Caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])
            self.builder.add_objects_from_file(self.Caminho, ["w02_portaria"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w02 = self.builder.get_object("w02_portaria")
        self.w02.set_title("Cadastro de Portaria")

        # ----------------------
        self.cb02_a02_id_condominio = self.builder.get_object("cb02_a02_id_condominio")

        self.lst_cb02 = Gtk.ListStore(str, str)
        self.cb02_a02_id_condominio.set_model(self.lst_cb02)
        self.desenha_cb02(cb=self.cb02_a02_id_condominio, lista=self.lst_cb02)
        registros = self.PC.pesquisar_condominios()
        # registros = self.carregar_condominio()
        self.preencher_combo_condominio(lista=self.lst_cb02, res=registros)

        # --------------------------
        # self.set_dado_combo(combobox=self.cb02_a02_id_condominio,
        #                     text=1,
        #                     coluna=self.col_cb02_a01_id_condominio)
        # --------------------------

        self.l02_a02_nome_portaria = self.builder.get_object("l02_a02_nome_portaria")
        self.l02_a02_nome_portaria.set_markup("<b>{a}</b>".format(a=self.l02_a02_nome_portaria.get_text()))
        self.e02_a02_nome_portaria = self.builder.get_object("e02_a02_nome_portaria")

        self.l02_a02_endereco = self.builder.get_object("l02_a02_endereco")
        self.l02_a02_endereco.set_markup("{a}".format(a=self.l02_a02_endereco.get_text()))
        self.e02_a02_endereco = self.builder.get_object("e02_a02_endereco")

        self.l02_a02_numero = self.builder.get_object("l02_a02_numero")
        self.l02_a02_numero.set_markup("{a}".format(a=self.l02_a02_numero.get_text()))
        self.e02_a02_numero = self.builder.get_object("e02_a02_numero")

        self.tv02_a02 = self.builder.get_object("tv02_a02")
        self.lst_tv02 = Gtk.ListStore(str, str, str, str)
        self.desenha_tv02(tv=self.tv02_a02)
        self.tv02_a02.set_model(self.lst_tv02)

        self.w02.set_visible(True)
        self.w02.show_all()
コード例 #14
0
ファイル: cadportaria.py プロジェクト: johndizaro/condominio
class CadPortaria:
    def __init__(self, **kwarg):

        # self.ge_dic_dados = dict()
        self.ge_dic_param_sis = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.col_cb02_a01_id_condominio = 0
        self.col_cb02_a01_nome = 1

        self.col_tv02_a02_id_condominio = 0
        self.col_tv02_a02_id_portaria = 1
        self.col_tv02_a02_nome_portaria = 2
        self.col_tv02_dados_portaria = 3

        self.JP = JanelaProblema()
        self.CBD = ComboBoxDados()

        if kwarg['dic_param_sis']:
            self.ge_dic_param_sis = kwarg['dic_param_sis']
        else:
            msg = 'Esta faltando os parametros do sistema'
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

            self.ge_selecionado = False

        self.PC = PesqCondominio(dic_param_sis=self.ge_dic_param_sis)
        self.builder = Gtk.Builder()
        try:
            self.Caminho = '/'.join([abspath(dirname(__file__)), 'glade', self.ge_dic_param_sis['AMBIENTE_TELA']])
            self.builder.add_objects_from_file(self.Caminho, ["w02_portaria"])
        except Exception as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

        self.builder.connect_signals(self)
        self.w02 = self.builder.get_object("w02_portaria")
        self.w02.set_title("Cadastro de Portaria")

        # ----------------------
        self.cb02_a02_id_condominio = self.builder.get_object("cb02_a02_id_condominio")

        self.lst_cb02 = Gtk.ListStore(str, str)
        self.cb02_a02_id_condominio.set_model(self.lst_cb02)
        self.desenha_cb02(cb=self.cb02_a02_id_condominio, lista=self.lst_cb02)
        registros = self.PC.pesquisar_condominios()
        # registros = self.carregar_condominio()
        self.preencher_combo_condominio(lista=self.lst_cb02, res=registros)

        # --------------------------
        # self.set_dado_combo(combobox=self.cb02_a02_id_condominio,
        #                     text=1,
        #                     coluna=self.col_cb02_a01_id_condominio)
        # --------------------------

        self.l02_a02_nome_portaria = self.builder.get_object("l02_a02_nome_portaria")
        self.l02_a02_nome_portaria.set_markup("<b>{a}</b>".format(a=self.l02_a02_nome_portaria.get_text()))
        self.e02_a02_nome_portaria = self.builder.get_object("e02_a02_nome_portaria")

        self.l02_a02_endereco = self.builder.get_object("l02_a02_endereco")
        self.l02_a02_endereco.set_markup("{a}".format(a=self.l02_a02_endereco.get_text()))
        self.e02_a02_endereco = self.builder.get_object("e02_a02_endereco")

        self.l02_a02_numero = self.builder.get_object("l02_a02_numero")
        self.l02_a02_numero.set_markup("{a}".format(a=self.l02_a02_numero.get_text()))
        self.e02_a02_numero = self.builder.get_object("e02_a02_numero")

        self.tv02_a02 = self.builder.get_object("tv02_a02")
        self.lst_tv02 = Gtk.ListStore(str, str, str, str)
        self.desenha_tv02(tv=self.tv02_a02)
        self.tv02_a02.set_model(self.lst_tv02)

        self.w02.set_visible(True)
        self.w02.show_all()

    def on_b02_fechar_clicked(self, widget):
        """
        :param:
        :return:
        """
        # tela = widget.get_parent_window()
        # tela.destroy()
        # self.w02.destroy()
        self.w02.destroy()

    def on_b02_salvar_clicked(self, widget):
        """
        executa as rotina para salvar e validas os campos de tela
        :param:
        :return:
        """
        # dados_salvos = False
        dic_dados = self.validar_campos()
        if not dic_dados:
            return False

        if self.ge_selecionado:
            dados_salvos = self.alterar(dic_dados=dic_dados)
        else:
            dados_salvos = self.incluir(dic_dados=dic_dados)

        if dados_salvos:
            id_condominio = self.ge_id_condominio
            self.limpar_tela()
            self.ge_id_condominio = id_condominio
            res = self.pesquisar_portarias(id_condominio=self.ge_id_condominio)
            self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
        else:
            msg = "Problemas ao salvar informações"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)

    def on_b02_excluir_clicked(self, widget):
        """
        Apaga portaria selecionada
        :return:
        """

        apagado = False

        dic_dados = self.validar_campos()
        if not dic_dados:
            return False

        if self.ge_selecionado:
            apagado = self.apagar_portaria(id_portaria=dic_dados['a02_id_portaria'])
        else:
            msg = "Selecione uma portaria para apagar"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)

        if apagado:
            id_condominio = self.ge_id_condominio
            self.limpar_tela()
            res = self.pesquisar_portarias(id_condominio=id_condominio)
            self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
        else:
            msg = "Problemas ao Apagar Portaria"
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            exit(1)

    def on_cb02_a02_id_condominio_changed(self, widget):
        """
        Prepara dados para ser mostrado no combobox bem como item selecionado do combo
        :param widget:
        :return:
        """
        try:
            id_condominio = self.CBD.get_dado_combo(comboboxm=widget,
                                                    col_traz=self.col_cb02_a01_id_condominio)
            res = self.pesquisar_portarias(id_condominio=id_condominio)
            self.lst_tv02.clear()
            if res:
                self.mostrar_dados_tv02(lista=self.lst_tv02, res=res)
                self.ge_id_condominio = id_condominio

        except AttributeError:
            pass

    def validar_campos(self):
        """
        Validação dos campos para salvar no banco de e dados
        :return: Se retorna dic_dados = False então tem problemas nos dados
                 Se retorna dic_dados com valors em um dicionario em pode salvar no banco de dados
        """

        dic_dados = dict()

        valido = True
        numerovalido = re.compile(r'[0-9]')

        if self.ge_id_condominio == 0:
            valido = False
        else:
            dic_dados['a02_id_condominio'] = self.ge_id_condominio
            dic_dados['a02_id_portaria'] = self.ge_id_portaria

        if len(str(self.e02_a02_nome_portaria.get_text().strip())) == 0:
            dic_dados = {}
            self.e02_a02_nome_portaria.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")
            self.e02_a02_nome_portaria.grab_focus()
            valido = False
        else:
            dic_dados['a02_nome_portaria'] = str(self.e02_a02_nome_portaria.get_text().strip())
            self.e02_a02_nome_portaria.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

        if len(str(self.e02_a02_endereco.get_text().strip())) > 0:
            dic_dados['a02_endereco'] = str(self.e02_a02_endereco.get_text().strip())
        else:
            dic_dados['a02_endereco'] = None

        if len(str(self.e02_a02_numero.get_text().strip())) > 0:
            wcampo = numerovalido.sub('', self.e02_a02_numero.get_text().strip())
            if len(wcampo) > 0:
                dic_dados = {}
                self.e02_a02_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "dialog-error")

                self.e02_a02_numero.grab_focus()
                valido = False
            else:
                dic_dados['a02_numero'] = self.e02_a02_numero.get_text()
                self.e02_a02_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

        if valido is False:
            dic_dados = False

        return dic_dados

    def limpar_tela(self):
        """
        Limpeza de campos de tela e variaveis de trabalho
        """

        # self.ge_dic_dados = dict()
        self.ge_selecionado = False

        self.ge_id_condominio = 0
        self.ge_id_portaria = 0

        self.e02_a02_nome_portaria.set_text('')
        self.e02_a02_endereco.set_text('')
        self.e02_a02_numero.set_text('')

        self.e02_a02_nome_portaria.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e02_a02_endereco.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)
        self.e02_a02_numero.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, None)

    def alterar(self, dic_dados):
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            sql = """
                  UPDATE a02_portarias SET
                  a02_nome_portaria = %s,
                  a02_endereco = %s,
                  a02_numero = %s
                  WHERE a02_id_condominio = %s
                  AND a02_id_portaria = %s;
             """, (
                dic_dados['a02_nome_portaria'] if "a02_nome_portaria" in dic_dados else None,
                dic_dados['a02_endereco'] if "a02_endereco" in dic_dados else None,
                dic_dados['a02_numero'] if "a02_numero" in dic_dados else 0,
                dic_dados['a02_id_condominio'] if "a02_id_condominio" in dic_dados else 0,
                dic_dados['a02_id_portaria'] if "a02_id_portaria" in dic_dados else 0,
            )
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def incluir(self, dic_dados):
        """
         inclução dos dados no banco de dados
         retorna True caso a inclução no banco de dados seja bem sucedida
         returna False caso a inclução no banco dee dados seja mal sucedida

         :param dic_dados: dicionario de dados validos
         :return boolean:
         """

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        sql = """
             INSERT INTO a02_portarias
             (
             a02_id_condominio,
             a02_nome_portaria,
             a02_endereco,
             a02_numero
             ) VALUES(
             %s,
             %s,
             %s,
             %s
             );
             """, (
            dic_dados['a02_id_condominio'] if "a02_id_condominio" in dic_dados else 0,
            dic_dados['a02_nome_portaria'] if "a02_nome_portaria" in dic_dados else None,
            dic_dados['a02_endereco'] if "a02_endereco" in dic_dados else None,
            dic_dados['a02_numero'] if "a02_numero" in dic_dados else 0,
        )
        try:
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def apagar_portaria(self, id_portaria):
        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])
        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        cur = conn.cursor()
        try:
            sql = """
             DELETE  from a02_portarias WHERE a02_id_portaria = %s;
             """, (id_portaria,
                   )
            cur.execute(sql)
        except psycopg2.DatabaseError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        conn.commit()
        cur.close()

        del conn, cur
        return True

    def mostrar_dados_tv02(self, lista, res):

        lista.clear()
        for i in res:
            lista.append([
                str(i['a02_id_condominio']),
                str(i['a02_id_portaria']),
                str(i['a02_nome_portaria']),
                str(i['dados_portaria']),
            ])

    def desenha_cb02(self, cb, lista):
        """
         DESENHA AS COLUNAS DO COMBO QUE IRÁ CONTER OS TIPOS DISPONIVEL
        :param cb:
        :param lista:
        :return:
        """
        cb.set_model(lista)
        cb.set_active(self.col_cb02_a01_id_condominio)

        cell_a01_id_condominio = Gtk.CellRendererText()
        cb.pack_start(cell_a01_id_condominio, True)
        cb.add_attribute(cell_a01_id_condominio, "text", self.col_cb02_a01_id_condominio)
        cell_a01_id_condominio.set_visible(False)

        cell_a01_nome = Gtk.CellRendererText()
        cb.pack_start(cell_a01_nome, True)
        cb.add_attribute(cell_a01_nome, "text", self.col_cb02_a01_nome)
        cell_a01_nome.set_visible(True)

    def desenha_tv02(self, tv):

        tv.set_rules_hint(True)
        tv.set_grid_lines(3)

        # TV_PEN.set_has_tooltip(True)
        tv.set_property("headers-visible", True)

        cell_tv02_a02_id_condominio = Gtk.CellRendererText()
        col_tv02_a02_id_condominio = Gtk.TreeViewColumn("ID.Condominio",
                                                        cell_tv02_a02_id_condominio,
                                                        text=self.col_tv02_a02_id_condominio)
        col_tv02_a02_id_condominio.set_visible(False)
        tv.append_column(col_tv02_a02_id_condominio)

        cell_tv02_a02_id_portaria = Gtk.CellRendererText()
        col_tv02_a02_id_portaria = Gtk.TreeViewColumn("ID.Portaria",
                                                      cell_tv02_a02_id_portaria,
                                                      text=self.col_tv02_a02_id_portaria)
        col_tv02_a02_id_portaria.set_visible(False)
        tv.append_column(col_tv02_a02_id_portaria)

        cel_tv02_a02_nome_portaria = Gtk.CellRendererText()
        col_tv02_a02_nome_portaria = Gtk.TreeViewColumn("Nome",
                                                        cel_tv02_a02_nome_portaria,
                                                        text=self.col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.set_visible(True)
        tv.append_column(col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.connect("clicked", self.clicado_col_tv02, tv, self.col_tv02_a02_nome_portaria)
        col_tv02_a02_nome_portaria.set_reorderable(True)

        cel_tv02_dados_portaria = Gtk.CellRendererText()
        col_tv02_dados_portaria = Gtk.TreeViewColumn("Endereço",
                                                     cel_tv02_dados_portaria,
                                                     text=self.col_tv02_dados_portaria)
        col_tv02_dados_portaria.set_visible(True)
        tv.append_column(col_tv02_dados_portaria)
        col_tv02_dados_portaria.connect("clicked", self.clicado_col_tv02, tv, self.col_tv02_dados_portaria)
        col_tv02_dados_portaria.set_reorderable(True)

        tv.set_enable_search(True)
        tv.set_headers_clickable(True)

    def clicado_col_tv02(self, widget, tv, coluna):
        """
        habilita pesquisa de tv
        """

        tv.set_enable_search(True)
        widget.set_sort_column_id(coluna)

        tv.set_search_column(coluna)

    def pesquisar_portarias(self, id_condominio=0):

        lst_dic_dados = []

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(""" select a02_id_condominio,
                                   a02_id_portaria,
                                   a02_nome_portaria,
                                   concat(a02_endereco, ', ', a02_numero) as dados_portaria
                            from a01_condominio, a02_portarias
                            WHERE a01_id_condominio = a02_portarias.a02_id_condominio
                            and a01_id_condominio = %s 
                            order by upper(a02_nome_portaria);
                            """, (id_condominio,))
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        for registro in registros:
            lst_dic_dados.append(dict(registro))

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return lst_dic_dados

    def on_tv02_a02_key_press_event(self, widget, event):

        keyval = Gdk.keyval_name(event.keyval)
        if keyval == 'Return' or keyval == 'KP_Enter':

            selection = widget.get_selection()
            modelx, iterx = selection.get_selected()

            self.limpar_tela()

            try:
                id_condominio = str(modelx.get_value(iterx, self.col_tv02_a02_id_condominio))
                id_portaria = str(modelx.get_value(iterx, self.col_tv02_a02_id_portaria))
                self.ge_id_condominio = id_condominio
                self.ge_id_portaria = id_portaria
            except ValueError:
                return False
            finally:
                self.ge_selecionado = True

            dic_portaria = self.consulta_portaria(id_condominio=id_condominio, id_portaria=id_portaria)

            if len(dic_portaria) != 0:
                self.mostrar_dados_tela(dic_portaria=dic_portaria)
                # self.ge_dic_dados = dic_portaria
                self.ge_selecionado = True
            else:
                self.limpar_tela()

    def preencher_combo_condominio(self, lista, res):

        lista.clear()

        for i in res:
            lista.append([
                str(i['a01_id_condominio']),
                str(i['a01_nome']) if i['a01_nome'] else None,
            ])

    def consulta_portaria(self, id_condominio, id_portaria):

        dic_dados = {}

        try:
            conn = psycopg2.connect(self.ge_dic_param_sis['DSN'])
            conn.set_client_encoding(self.ge_dic_param_sis['CLIENTEENCODING'])

            cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
            cur.execute(""" SELECT *
                            FROM a02_portarias
                            WHERE  a02_id_condominio = %s
                            AND  a02_id_portaria = %s;
                            ;
                            """, (id_condominio, id_portaria)
                        )
            registros = cur.fetchall()

        except psycopg2.ProgrammingError as msg:
            logging.error(msg)
            self.JP.msgerro(janela=None,
                            texto_primario="Cadastro de Portaria",
                            texto_secundario=msg)
            return False

        for registro in registros:
            dic_dados = dict(registro)

        if not registros:
            return False

        cur.close()

        del conn, cur, registros

        return dic_dados

    def mostrar_dados_tela(self, dic_portaria):

        for key, value in dic_portaria.items():
            if key == 'a02_nome_portaria':
                if value is not None:
                    self.e02_a02_nome_portaria.set_text(str(value))
                else:
                    self.e02_a02_nome_portaria.set_text('')

            if key == 'a02_endereco':
                if value is not None:
                    self.e02_a02_endereco.set_text(str(value))
                else:
                    self.e02_a02_endereco.set_text('')

            if key == 'a02_numero':
                if value > 0:
                    self.e02_a02_numero.set_text(str(value))
                else:
                    self.e02_a02_numero.set_text('')