Ejemplo n.º 1
0
    def buscaPD(self, ID):
        banco = BANCO()

        try:
            curDados = banco.conexao.cursor()
            curDados.execute('''SELECT
                                    PDS.*, 
                                    COALESCE(CORES.DESCRICAO, 'SEM COR'),
                                    COALESCE(CORES.PRIMARIA, '#000000'),
                                    COALESCE(CORES.SECUNDARIA, '#000000'),
                                    COALESCE(CORES.COR_TEXTO, '#FFFFFF')
                                FROM
                                    PDS
                                LEFT JOIN
                                    CORES ON (CORES.PK_CRS = PDS.COR) 
                                WHERE
                                    PK_RCQ = "{}"
                             '''.format(str(ID)))

            self.dadosPD = curDados.fetchone()

            return "Busca feita com sucesso!"

        except Exception as e:
            return "Ocorreu um erro na busca do PD"
            logger.logError(
                "Ocorreu um erro na busca do PD    -    Details: {}".format(
                    str(e)))
Ejemplo n.º 2
0
    def registraRQSetup(self, pdID, dados=()):
        banco = BANCO()
        agora = dt.now()

        cur = banco.conexao.cursor()

        for linha in dados:
            cur.execute("""REPLACE INTO REGISTROS_QUALIDADE (
                                DATA,
                                FK_ID,
                                FK_TRG,
                                VALOR_REGISTRO,
                                LADO,
                                FK_USU,
                                MAQUINA)
                            VALUES
                                ("%s",
                                "%s",
                                %i,
                                %d,
                                %i,
                                %i,
                                "%s")""" %
                        (agora, pdID, int(linha[1]), float(
                            linha[2]), int(linha[3]), int(linha[4]), linha[5]))
        banco.conexao.commit()
Ejemplo n.º 3
0
    def buscaListaMotivosDivergencia(self):
        banco = BANCO()

        try:
            c = banco.conexao.cursor()
            c.execute('''SELECT 
                             DESCRICAO
                         FROM 
                             MOTIVOS_DIVERGENCIAS
                         ORDER BY
                             DESCRICAO
                       ''')

            linhas = c.fetchall()

            for linha in linhas:
                self.listaMotivos.append(linha[0])

            c.close()

            return self.listaMotivos
        except Exception as e:
            logger.logError(
                "Ocorreu um erro na busca dos motivos    -    Details: {}".
                format(str(e)))
Ejemplo n.º 4
0
    def tomaTempoEvento(self, FK_ID, FK_TTM, FK_USU, MAQ):
        try:
            banco = BANCO()
            agora = dt.now()

            cur = banco.conexao.cursor()

            cur.execute(
                """INSERT INTO TEMPOS (
                                DATA,
                                FK_ID,
                                FK_TTM,
                                FK_USU,
                                MAQUINA)
                            VALUES
                                (datetime(?),
                                ?,
                                ?,
                                ?,
                                ?)
                                """, (agora, FK_ID, FK_TTM, FK_USU, MAQ))

            banco.conexao.commit()
        except Exception as e:
            logger.logError(
                "Erro ao tomar tempo de Evento    -    Details: {}".format(
                    str(e)))
Ejemplo n.º 5
0
    def Definicoes(self):
        try:
            self.diretorio = os.path.dirname(os.path.abspath(__file__))
            self.configFile = cfgprsr.ConfigParser()
            self.configFile.read(self.diretorio + '/config.ini')
            self.maquina = self.configFile['DEFAULT']['maquina']
        except Exception as e:
            logger.logError(
                "Erro ao ler as variáveis de ambiente.    -    Details: {}".
                format(str(e)))

        try:
            self.connLocal = BANCO().conexao
        except Exception as e:
            logger.logError(
                "Erro ao conectar ao banco de dados Local para priorização dos PDs.    -    Details: {}"
                .format(str(e)))
Ejemplo n.º 6
0
    def buscaLista(self):
        banco = BANCO()

        if self.maquinaAutomatica == 'True':
            strOrdenacao = """ORDER BY
                                  PDS.PRIORIDADE,
                                  BITOLA,
                                  (SELECT SUM([QTD_PD_REQ]) FROM PDS P where P.CABO = PDS.CABO GROUP BY CABO) DESC,
                                  MEDIDA DESC"""
        else:
            strOrdenacao = """ORDER BY
                                  BITOLA,
                                  (SELECT SUM([QTD_PD_REQ]) FROM PDS P where P.CABO = PDS.CABO GROUP BY CABO) DESC,
                                  MEDIDA DESC"""

        try:
            c = banco.conexao.cursor()

            if self.filtaLista == 'True':
                c.execute('''SELECT
                               *
                             FROM
                               PDS
                             WHERE
                               PDS."QTD_PD_REQ" > PDS.QTD_CORTADA
                          ''' + strOrdenacao)
            else:
                c.execute('''SELECT
                               *
                             FROM
                               PDS
                             WHERE
                               PDS.MAQUINA = "%s" AND
                               PDS."QTD_PD_REQ" > PDS.QTD_CORTADA
                          ''' % self.maquina + strOrdenacao)

            self.lista = c.fetchall()

            c.close()

            return "Busca feita com sucesso!"

        except Exception as e:
            return "Ocorreu um erro na busca do PD"
            logger.logError(
                "Ocorreu um erro na busca do PD    -    Details: {}".format(
                    str(e)))
Ejemplo n.º 7
0
    def botaoLogin(self):
        global idUsuario, nomeUsuario

        banco = BANCO()
        cur = banco.conexao.cursor()

        usr = self.user.get()
        pwd = self.password.get()
        pwdbco = None

        try:
            cur.execute(""" SELECT
                                    PK_USU,
                                    NOME,
                                    SENHA
                                FROM
                                    USUARIOS
                                WHERE
                                    NOME = "%s"
                            """ % usr)

            dadosUsuario = cur.fetchone()
            idUsuario = dadosUsuario[0]
            nomeUsuario = dadosUsuario[1]
            pwdbco = dadosUsuario[2]

            if pwdbco == pwd:
                self.lblMensagem["text"] = "Login OK"
                loginRoot.destroy()

            else:
                self.lblMensagem["text"] = "Senha incorreta"
                logger.logError(
                    "Tentativa de Login inválida    -    Details: Senha incorreta para usuario '{}'"
                    .format(str(usr)))

        except:
            self.lblMensagem["text"] = "Usuário não encontrado"
            logger.logError(
                "Tentativa de Login inválida    -    Details: Usuário '{}' não encontrado"
                .format(str(usr)))
Ejemplo n.º 8
0
    def registraCorteNoBanco(self, ID, qtdCortadaEmPecas, qtdCortadaEmMetros):
        try:
            try:
                conOrigem = GLOBAL_DATABASE().conexao
                curOrigem = conOrigem.cursor()
            except Exception as e:
                logger.logError(
                    "Erro no metodo: pd.registraCorteNoBanco() -> Erro na conexão com o banco de dados de origem!    -    Details: {}"
                    .format(str(e)))
                return False

            try:
                id_array = ID.split('|')
                requisicao = id_array[0]
                corte = id_array[1]
                quantidade = id_array[2]

                curOrigem.execute(
                    "EXECUTE PROCEDURE ATUALIZA_IQC({}, {}, {}, {})".format(
                        str(requisicao), str(corte), str(quantidade),
                        str(qtdCortadaEmMetros)))
            except Exception as e:
                logger.logError(
                    "Erro no metodo: pd.registraCorteNoBanco() -> Erro ao tentar transmissao para o Banco de dados Global!    -    Details: {}"
                    .format(str(e)))
                return False

            try:
                bancoLocal = BANCO()
                curLocal = bancoLocal.conexao.cursor()
            except Exception as e:
                logger.logError(
                    "Erro no metodo: pd.registraCorteNoBanco() -> Erro na conexão com o banco de dados local!    -    Details: {}"
                    .format(str(e)))
                return False

            try:
                query = """ 
                            UPDATE
                                PDS
                            SET
                                QTD_CORTADA = {}
                            WHERE
                                PK_RCQ = '{}';
                        """.format(str(qtdCortadaEmPecas), str(ID))

                curLocal.execute(query)
            except Exception as e:
                logger.logError(
                    "Erro no metodo: pd.registraCorteNoBanco() -> Erro ao tentar transmissao para o Banco de dados Local!    -    Details: {}"
                    .format(str(e)))
                return False

            try:
                conOrigem.commit()
                bancoLocal.conexao.commit()
                conOrigem.close()
                bancoLocal.conexao.close()

                return True
            except Exception as e:
                logger.logError(
                    "Erro ao commitar registro de corte nos bancos!    -    Details: {}"
                    .format(str(e)))

        except Exception as e:
            logger.logError(
                "Erro ao registrar o corte nos bancos!    -    Details: {} ".
                format(str(e)))
            return False
Ejemplo n.º 9
0
class AlgoritmoSeparacao:
    def __init__(self, master=None, headless=False):
        self.master = master
        self.headless = headless
        self.diretorio = os.path.dirname(os.path.abspath(__file__))

        def montaWidgets():
            self.varBarra = IntVar()
            self.cabecalho = Label(self.master,
                                   text="Aguarde o Sequenciamento de Setup",
                                   font=["Play", 20, "bold"],
                                   bg="#333333",
                                   fg="white",
                                   justify="center")
            self.cabecalho.pack(fil=BOTH, expand=1, pady=20)

            self.barraProgresso = ttk.Progressbar(self.master,
                                                  orient='horizontal',
                                                  mode='determinate',
                                                  len=400,
                                                  var=self.varBarra)
            self.barraProgresso.pack(fill=BOTH, expand=1, pady=20, padx=50)

            self.rodape = Label(
                self.master,
                text=
                "Isso pode levar alguns segundos mas estamos \n garantindo o menor número de setups possível",
                font=["Play", 14, "bold"],
                bg="#333333",
                fg="#BBBBBB",
                justify="center")
            self.rodape.pack(fill=BOTH, expand=1, pady=20)

            self.logoTri_100p = PhotoImage(
                file=self.diretorio + "/src/images/logos/logoTri_100p.png")

            self.logoTri = Label(self.master,
                                 image=self.logoTri_100p,
                                 font=["Maven Pro", 14, "bold"],
                                 bg="#333333",
                                 fg="#BBBBBB")
            self.logoTri.pack(pady=25)

        if not self.headless:
            montaWidgets()

        self.Definicoes()
        self.OrdenaLista()

    def Definicoes(self):
        try:
            self.diretorio = os.path.dirname(os.path.abspath(__file__))
            self.configFile = cfgprsr.ConfigParser()
            self.configFile.read(self.diretorio + '/config.ini')
            self.maquina = self.configFile['DEFAULT']['maquina']
        except Exception as e:
            logger.logError(
                "Erro ao ler as variáveis de ambiente.    -    Details: {}".
                format(str(e)))

        try:
            self.connLocal = BANCO().conexao
        except Exception as e:
            logger.logError(
                "Erro ao conectar ao banco de dados Local para priorização dos PDs.    -    Details: {}"
                .format(str(e)))

    def ImportaLista(self):
        try:
            self.lco = pd.read_sql_query(
                """
                                         SELECT 
                                             PK_RCQ, 
                                             [QTD_PD_REQ] - [QTD_CORTADA] AS "QTD",
                                             [ACABAMENTO_1],
                                             [ACABAMENTO_2],
                                             PRIORIDADE
                                         FROM 
                                             PDS
                                         WHERE
                                             [QTD_PD_REQ] - [QTD_CORTADA] > 0 AND
                                             MAQUINA = '%s';    
                                         """ % self.maquina,
                self.connLocal).fillna('Vazio')
        except Exception as e:
            logger.logError(
                "Erro ao importar a lista de PDs para priorização de PDs.    -    Details: {}"
                .format(str(e)))

    def ImportaAplicaveis(self):
        try:
            self.apl = pd.read_sql_query(
                """
                                             SELECT
                                                 *
                                             FROM
                                                 APLICAVEL;
                                         """, self.connLocal)
        except Exception as e:
            logger.logError(
                "Erro ao ler a tabela APLICAVEL do banco de dados local.    -    Details: {}"
                .format(str(e)))

    def ExtraiTerminais(self):
        self.ImportaLista()
        self.ImportaAplicaveis()

        self.terminais = pd.Series(
            pd.concat([self.lco['ACABAMENTO_1'],
                       self.lco['ACABAMENTO_2']]).unique())

        self.n = len(self.terminais)
        self.c = sum(range(self.n))

        if not self.headless:
            self.barraProgresso['max'] = self.n

    def DefineRankeamento(self):
        try:
            self.ExtraiTerminais()
        except Exception as e:
            logger.logError(
                "Erro ao extrair os terminais da lista de PDs para priorização dos PDs.    -    Details: {}"
                .format(str(e)))

        self.ranking = pd.DataFrame()
        vol = pd.Series([])

        for t in self.terminais:
            q = 0
            for a in ('ACABAMENTO_1', 'ACABAMENTO_2'):
                q += self.lco[self.lco[a] == t].sum()['QTD']

            vol[len(vol)] = q

        self.ranking['ACABAMENTO'] = self.terminais
        self.ranking['Volume'] = vol

        self.ranking = self.ranking.join(self.apl.set_index('ACABAMENTO'),
                                         on='ACABAMENTO')                  \
                                   .fillna('Z')                            \
                                   .sort_values(['APLICAVEL', 'Volume'],
                                                ascending=[False, False])  \
                                   .reset_index(drop=True)

    def DefinePrioridades(self):
        try:
            self.DefineRankeamento()
        except Exception as e:
            logger.logError(
                "Erro ao definir o ranking de terminais para priorização dos PDs.    -    Details: {}"
                .format(str(e)))

        prioridade = 1
        Acab1 = self.lco['ACABAMENTO_1']
        Acab2 = self.lco['ACABAMENTO_2']

        for t in self.ranking['ACABAMENTO']:
            if t == 'Vazio':
                try:
                    if self.lco.loc[((Acab1 == t) & (Acab2 == t)) |
                                    ((Acab2 == t) &
                                     (Acab1 == t))]['QTD'].sum() > 0:
                        self.lco.loc[(((Acab1 == t) & (Acab2 == t)) |
                                      ((Acab2 == t) & (Acab1 == t))),
                                     'PRIORIDADE'] = prioridade
                        prioridade += 1

                    continue

                except:
                    pass

            else:
                try:
                    for t2 in ('Vazio', t):
                        if self.lco.loc[((Acab1 == t) & (Acab2 == t2)) |
                                        ((Acab2 == t) &
                                         (Acab1 == t2))]['QTD'].sum() > 0:
                            self.lco.loc[((Acab1 == t) & (Acab2 == t2)) |
                                         ((Acab2 == t) & (Acab1 == t2)),
                                         'PRIORIDADE'] = prioridade
                            prioridade += 1
                except:
                    pass

                x = self.ranking.index[self.ranking['ACABAMENTO'] == t][0]
                if not self.headless:
                    self.varBarra.set(x)
                    self.master.update()

                    if x >= self.n * 0.8:
                        self.rodape[
                            'text'] = "Quase lá. Só falta mais um pouco..."

                for i in range(self.n - 1, x, -1):

                    t2 = self.ranking.loc[i, 'ACABAMENTO']

                    try:
                        if self.lco.loc[((Acab1 == t) & (Acab2 == t2)) |
                                        ((Acab2 == t) &
                                         (Acab1 == t2))]['QTD'].sum() > 0:
                            self.lco.loc[((Acab1 == t) & (Acab2 == t2)) |
                                         ((Acab2 == t) & (Acab1 == t2)),
                                         'PRIORIDADE'] = prioridade
                            prioridade += 1
                        else:
                            continue
                    except:
                        pass

    def ExibeResultados(self):
        print('Lista de Corte:')
        print(self.lco.head(10))
        print('[...] \n\n')

        print('Quantidade de acabamentos possíveis nessa LCO: %s' % self.n)
        print(self.terminais)
        print(
            'Quantidade de combinações possíveis de Acabamentos nesta LCO: %s\n'
            % self.c)

        print('Ranking de self.aplicações por volume:')
        print(self.ranking)
        print('\n\nSequência de setups de self.aplicação:')
        print(self.lco.sort_values('PRIORIDADE').to_string())

    def RegistraOrdenacaoNoBanco(self):
        try:
            self.DefinePrioridades()
        except Exception as e:
            logger.logError(
                "Erro ao definir as prioridades no algoritmo de Priorização de PDS.    -    Details: {}"
                .format(str(e)))

        self.lco.sort_values('PRIORIDADE').to_sql('tempTabelaOrdenada',
                                                  self.connLocal,
                                                  if_exists='replace',
                                                  index=False)

        curLocal = self.connLocal.cursor()

        curLocal.execute("""
                            UPDATE
                                PDS
                            SET
                                PRIORIDADE = (SELECT 
                                                  PRIORIDADE 
                                              FROM 
                                                  tempTabelaOrdenada TEMP
                                              WHERE
                                                  TEMP.PK_RCQ = PDS.PK_RCQ);"""
                         )

        curLocal.execute("DROP TABLE tempTabelaOrdenada;")

        self.connLocal.commit()

        curLocal.close()
        self.connLocal.close()

    def OrdenaLista(self):
        try:
            self.RegistraOrdenacaoNoBanco()
        except Exception as e:
            logger.logError(
                "Erro ao registrar a lista já priorizada no banco de dados local.    -    Details: {}"
                .format(str(e)))

        # self.ExibeResultados()

        if not self.headless:
            self.master.destroy()