def insertDados(sql, values):
    conn = conexao.myConexao()
    cursor = conn.cursor()
    res = cursor.execute(sql, values)

    cursor.close()
    conn.commit()
    conn.close()
    if res == 1:
        return True
    else:
        return False
예제 #2
0
def getOperadoraByName(nomeOperadora):
    conn = conexao.myConexao()
    cursor = conn.cursor()

    sqlOperadora = f"SELECT * FROM tbl_operadora WHERE titulo like '{nomeOperadora}%';"

    res = cursor.execute(sqlOperadora)

    if res == 0:
        print(f"Nenhum operadora encontrada para: \n{sqlOperadora}")
        return []
    elif res == 1:
        return cursor.fetchone()
    print(sqlOperadora)
    return False
def obterPrecos(driver):
    # site = 'http://*****:*****@id="tab-produto"]/div/h4[{num}]'):
            titulo = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/h4[{num}]').text
            validade = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/p[{num}]').text
            print(f"\nLendo {num}")
            print(titulo)
            print(validade)
            min_vidas = None
            max_vidas = None
            titulo = str(titulo).upper()
            if re.search('03 A 09 VIDAS', titulo):
                min_vidas = 0
                max_vidas = 9
            elif re.search('10 A 19 VIDAS', titulo):
                min_vidas = 10
                max_vidas = 19
            elif re.search('20 A 29 VIDAS', titulo):
                min_vidas = 20
                max_vidas = 29
            elif re.search('30 A 99 VIDAS', titulo):
                min_vidas = 30
                max_vidas = 99

            id_coparticipacao = None
            if re.search('SEM COPART', titulo):
                id_coparticipacao = 2
            elif re.search('COM 20% DE COPART', titulo):
                id_coparticipacao = 3
            elif re.search('COM 30% DE COPART', titulo):
                id_coparticipacao = 5

            planos = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/table[{num}]/thead'
            ).find_elements_by_tag_name('th')

            planosArray = []
            for plano in planos:
                planosArray.append(plano.text)

            # del(planosArray[0])
            print(planosArray)

            for i, plano in enumerate(planosArray):
                # print("num",i)
                precos = []
                for j in range(10):
                    if i > 0:
                        preco = driver.find_element_by_xpath(
                            f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j+1}]/td[{i+1}]'
                        ).text
                        precos.append(
                            float(
                                str(preco).replace(".", "").replace(",", ".")))

                if i > 0:
                    print(precos)

                    nomePlano = str(plano).split('[')
                    plano = nomePlano[0].strip().upper()
                    modalidade = nomePlano[1].split(']')[0].strip()
                    id_modalidade = 0
                    if modalidade == "E":
                        id_modalidade = 1
                    elif modalidade == "A":
                        id_modalidade = 2

                    conn = conexao.myConexao()
                    cursor = conn.cursor()

                    if plano == 'OURO MAIS':
                        plano = 'OURO MAIS Q'

                    sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = 11;"
                    print(sql)
                    res = cursor.execute(sql)
                    # print(res)
                    if res == 1:
                        result_select = cursor.fetchall()[0]
                        print(result_select)
                        id_plano = result_select[0]
                        id_categoria_plano = result_select[3]

                        id_operadora = 11
                        id_tipo_contratacao = 2
                        qtd_titulares = 1
                        hospitalar = 1
                        id_tipo_empresa = 2
                        id_administradora = 0
                        data_reajuste = '2021-06-01'
                        id_tipo_contratacao_lead = 0
                        id_tipo_tabela = None

                        print("id_area => ", id_area)
                        print("id_categoria_plano => ", id_categoria_plano)
                        print("id_coparticipacao => ", id_coparticipacao)
                        print("id_modalidade => ", id_modalidade)
                        print("id_operadora => ", id_operadora)
                        print("id_tipo_contratacao => ", id_tipo_contratacao)
                        print("id_plano => ", id_plano)
                        print("preco0_18 => ", precos[0])
                        print("preco_m59 => ", precos[9])
                        print("qtd_titulares => ", qtd_titulares)
                        print("hospitalar => ", hospitalar)
                        print("min_vidas => ", min_vidas)
                        print("max_vidas => ", max_vidas)
                        print("id_tipo_empresa => ", id_tipo_empresa)
                        print("id_administradora => ", id_administradora)
                        print("data_reajuste => ", data_reajuste)
                        print("id_tipo_contratacao_lead => ",
                              id_tipo_contratacao_lead)
                        print("id_tipo_tabela => ", id_tipo_tabela)

                        sql = "insert into tbl_preco_faixa_etaria (" \
                              "id_area, " \
                              "id_categoria_plano, " \
                              "id_coparticipacao, " \
                              "id_modalidade, " \
                              "id_operadora, " \
                              "id_tipo_contratacao, " \
                              "id_tipo_plano, " \
                              "preco0_18, " \
                              "preco19_23, " \
                              "preco24_28, " \
                              "preco29_33, " \
                              "preco34_38, " \
                              "preco39_43, " \
                              "preco44_48, " \
                              "preco49_53, " \
                              "preco54_58, " \
                              "preco_m59, " \
                              "qtd_titulares, " \
                              "id_sindicato, " \
                              "hospitalar, " \
                              "min_vidas, " \
                              "max_vidas, " \
                              "id_tipo_empresa, " \
                              "id_administradora, " \
                              "ultimo_reajuste, " \
                              "id_tipo_contratacao_lead, " \
                              "id_tipo_tabela ) " \
                              "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"

                        values = (
                            id_area,  # id_area
                            id_categoria_plano,  # id_categoria_plano
                            id_coparticipacao,  # id_coparticipacao
                            id_modalidade,  # id_modalidade,
                            id_operadora,  # id_operadora
                            id_tipo_contratacao,  # id_tipo_contratacao
                            id_plano,  # id_tipo_plano
                            precos[0],  # preco0_18
                            precos[1],  #
                            precos[2],
                            precos[3],
                            precos[4],
                            precos[5],
                            precos[6],
                            precos[7],
                            precos[8],
                            precos[9],  # preco_m59
                            qtd_titulares,  # qtd_titulares
                            None,  # id_sindicato
                            hospitalar,  # hospitalar
                            min_vidas,  # min_vidas
                            max_vidas,  # max_vidas
                            id_tipo_empresa,  # id_tipo_empresa
                            id_administradora,  # id_administradora
                            data_reajuste,  # ultimo_reajuste
                            id_tipo_contratacao_lead,  # id_tipo_contratacao_lead
                            id_tipo_tabela  # id_tipo_tabela
                        )
                        # print(values)

                        teste = "select * from tbl_preco_faixa_etaria " \
                                f"where id_area = {id_area} and id_operadora = {id_operadora} and id_tipo_plano = {id_plano} and id_modalidade = {id_modalidade} " \
                                f"and id_tipo_contratacao = {id_tipo_contratacao} and id_coparticipacao = {id_coparticipacao} and qtd_titulares = {qtd_titulares} " \
                                f"and min_vidas = {min_vidas} and id_sindicato is null and id_tipo_empresa = {id_tipo_empresa} and hospitalar = {hospitalar};"
                        print(teste)
                        res = cursor.execute(teste)
                        print(res)

                        print(values, " -- extraidos do simulador")
                        if res == 1:
                            select = cursor.fetchall()[0]
                            id = select[0]
                            preco0_18 = select[8]
                            preco59 = select[17]
                            ultimo_reajuste = select[25]

                            print(select[1:28], f"ID: {id} -- banco de dados")
                            if not preco0_18 == precos[
                                    0] or not preco59 == precos[
                                        9]:  # and not ultimo_reajuste == data_reajuste
                                print("Atualizar Precos! -----")
                                planos_atualizados.append(plano)

                                if ultimo_reajuste == None:
                                    ultimo_reajuste = "null"
                                else:
                                    ultimo_reajuste = datetime.strptime(
                                        str(ultimo_reajuste),
                                        '%Y-%m-%d').date()
                                print(ultimo_reajuste)

                                update = "UPDATE `tbl_preco_faixa_etaria` SET " \
                                         f"`preco0_18`='{precos[0]}', " \
                                         f"`preco19_23`='{precos[1]}', " \
                                         f"`preco24_28`='{precos[2]}', " \
                                         f"`preco29_33`='{precos[3]}', " \
                                         f"`preco34_38`='{precos[4]}', " \
                                         f"`preco39_43`='{precos[5]}', " \
                                         f"`preco44_48`='{precos[6]}', " \
                                         f"`preco49_53`='{precos[7]}', " \
                                         f"`preco54_58`='{precos[8]}', " \
                                         f"`preco_m59`='{precos[9]}'," \
                                         f"`min_vidas`='{min_vidas}', " \
                                         f"`max_vidas`='{max_vidas}', " \
                                         f"`status`='1', " \
                                         f"`ultimo_reajuste`='{data_reajuste}' " \
                                         f"WHERE `id`='{id}';"
                                print(update)

                                if salvar:
                                    res = cursor.execute(update)
                                else:
                                    res = 1

                                if res == 1:

                                    if ultimo_reajuste == None or ultimo_reajuste == "null":
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); "
                                    else:
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); "

                                    print(insert)
                                    if salvar:
                                        res = cursor.execute(insert)
                                        print(res, "sucesso")

                        elif res == 0:
                            print(
                                "----------------------------- Cadastrar Novo --------------------------------"
                            )
                            print(f'{sql} {values}')
                            ref_plano = True
                            for plan in planos_inseridos:
                                if plan == plano:
                                    ref_plano = False

                            if ref_plano:
                                planos_inseridos.append(f"{plano}")

                            if salvar:

                                if not insertDados(sql, values):
                                    print(
                                        "ERROR: erro ao inserir precos no banco de dados!"
                                    )
                                else:
                                    inseridos += 1
                        elif res > 1:
                            print("Mais de um plano cadastrado")

                    # Colocar em uma lista os planos nao encontrados
                    elif res == 0:
                        print("Nao achou o plano!")
                        ref_plano = True
                        for plan in planos_sem_cadastros:
                            if plan == plano:
                                ref_plano = False

                        if ref_plano:
                            planos_sem_cadastros.append(f"{plano}")
                    elif res > 1:
                        print("Achou mais de um plano!")

                    cursor.close()
                    conn.commit()
                    conn.close()

            num += 1

    except:
        print("Acabou")
        pass
    finally:
        pass
    print(f"Total de preços de planos atualizados: {inseridos}")
    print(f"Planos que nao foram encontrados: \n {planos_sem_cadastros}")
    print(f"Planos que sofreram alteracoes: \n {planos_atualizados}")
    print(f"Planos sem preços cadastrados: \n {planos_inseridos}")
def obterPrecos(driver):
    site = 'http://*****:*****@id="tab-produto"]/div/h4[{num}]')
            except:
                print("element no ionterable")
                refTable = False
                break
            finally:
                pass

            titulo = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/h4[{num}]').text
            validade = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/p[{num}]').text
            print(f"\nLendo {num}")
            print(titulo)
            print(validade)

            titulo = str(titulo).upper()
            qtd_titulares = '1'
            hospitalar = 1
            min_vidas = None
            max_vidas = None
            if re.search('01 A 29 VIDAS', titulo):
                min_vidas = 1
                max_vidas = 29
            elif re.search('4 A 29 VIDAS', titulo):
                min_vidas = 4
                max_vidas = 29
                qtd_titulares = '2'

            if re.search("HOSPITALAR", titulo):
                hospitalar = 2

            id_coparticipacao = 2
            id_operadora = 15

            planos = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/table[{num}]/thead'
            ).find_elements_by_tag_name('th')

            planosArray = []
            for plano in planos:
                planosArray.append(plano.text)

            # del(planosArray[0])
            print(planosArray)

            for i, plano in enumerate(planosArray):
                # print("num",i)
                precos = []
                for j in range(9):
                    if i > 0:
                        preco = driver.find_element_by_xpath(
                            f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j + 1}]/td[{i + 1}]'
                        ).text
                        precos.append(
                            float(
                                str(preco).replace(".", "").replace(",", ".")))

                if i > 0:
                    print(precos)

                    nomePlano = str(plano).split('[')
                    plano = nomePlano[0].strip().upper()
                    modalidade = nomePlano[1].split(']')[0].strip()
                    id_modalidade = 0
                    if modalidade == "E":
                        id_modalidade = 1
                    elif modalidade == "A":
                        id_modalidade = 2

                    conn = conexao.myConexao()
                    cursor = conn.cursor()

                    sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = {id_operadora};"
                    print(sql)
                    res = cursor.execute(sql)
                    # print(res)
                    if res == 1:
                        result_select = cursor.fetchall()[0]
                        print(result_select)
                        id_plano = result_select[0]
                        id_categoria_plano = result_select[3]

                        id_area = 1

                        id_tipo_contratacao = 2

                        id_tipo_empresa = 2
                        id_administradora = 0
                        data_reajuste = '2020-10-01'
                        id_tipo_contratacao_lead = 0
                        id_tipo_tabela = None

                        print("id_area => ", id_area)
                        print("id_categoria_plano => ", id_categoria_plano)
                        print("id_coparticipacao => ", id_coparticipacao)
                        print("id_modalidade => ", id_modalidade)
                        print("id_operadora => ", id_operadora)
                        print("id_tipo_contratacao => ", id_tipo_contratacao)
                        print("id_plano => ", id_plano)
                        print("preco0_18 => ", precos[0])
                        print("preco54_58 => ", precos[8])
                        print("qtd_titulares => ", qtd_titulares)
                        print("hospitalar => ", hospitalar)
                        print("min_vidas => ", min_vidas)
                        print("max_vidas => ", max_vidas)
                        print("id_tipo_empresa => ", id_tipo_empresa)
                        print("id_administradora => ", id_administradora)
                        print("data_reajuste => ", data_reajuste)
                        print("id_tipo_contratacao_lead => ",
                              id_tipo_contratacao_lead)
                        print("id_tipo_tabela => ", id_tipo_tabela)

                        sql = "insert into tbl_preco_faixa_etaria (" \
                              "id_area, " \
                              "id_categoria_plano, " \
                              "id_coparticipacao, " \
                              "id_modalidade, " \
                              "id_operadora, " \
                              "id_tipo_contratacao, " \
                              "id_tipo_plano, " \
                              "preco0_18, " \
                              "preco19_23, " \
                              "preco24_28, " \
                              "preco29_33, " \
                              "preco34_38, " \
                              "preco39_43, " \
                              "preco44_48, " \
                              "preco49_53, " \
                              "preco54_58, " \
                              "preco_m59, " \
                              "qtd_titulares, " \
                              "id_sindicato, " \
                              "hospitalar, " \
                              "min_vidas, " \
                              "max_vidas, " \
                              "id_tipo_empresa, " \
                              "id_administradora, " \
                              "ultimo_reajuste, " \
                              "id_tipo_contratacao_lead, " \
                              "id_tipo_tabela ) " \
                              "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"

                        values = (
                            id_area,  # id_area
                            id_categoria_plano,  # id_categoria_plano
                            id_coparticipacao,  # id_coparticipacao
                            id_modalidade,  # id_modalidade,
                            id_operadora,  # id_operadora
                            id_tipo_contratacao,  # id_tipo_contratacao
                            id_plano,  # id_tipo_plano
                            precos[0],  # preco0_18
                            precos[1],  #
                            precos[2],
                            precos[3],
                            precos[4],
                            precos[5],
                            precos[6],
                            precos[7],
                            precos[8],  # preco54_58
                            None,
                            qtd_titulares,  # qtd_titulares
                            None,  # id_sindicato
                            hospitalar,  # hospitalar
                            min_vidas,  # min_vidas
                            max_vidas,  # max_vidas
                            id_tipo_empresa,  # id_tipo_empresa
                            id_administradora,  # id_administradora
                            data_reajuste,  # ultimo_reajuste
                            id_tipo_contratacao_lead,  # id_tipo_contratacao_lead
                            id_tipo_tabela  # id_tipo_tabela
                        )
                        # print(values)

                        teste = "select * from tbl_preco_faixa_etaria " \
                                f"where id_area = {id_area} " \
                                f"and id_operadora = {id_operadora} " \
                                f"and id_tipo_plano = {id_plano} " \
                                f"and id_modalidade = {id_modalidade} " \
                                f"and id_tipo_contratacao = {id_tipo_contratacao} " \
                                f"and id_coparticipacao = {id_coparticipacao} " \
                                f"and qtd_titulares = {qtd_titulares} " \
                                f"and min_vidas = {min_vidas} " \
                                f"and id_sindicato is null " \
                                f"and id_tipo_empresa = {id_tipo_empresa} " \
                                f"and hospitalar = {hospitalar};"
                        print(teste)
                        res = cursor.execute(teste)
                        print(res)

                        print(values, " -- extraidos do simulador")
                        if res == 1:
                            select = cursor.fetchall()[0]
                            id = select[0]
                            preco0_18 = select[8]
                            preco54_58 = select[16]
                            ultimo_reajuste = select[25]

                            print(select[1:28], f"ID: {id} -- banco de dados")
                            if not preco0_18 == precos[
                                    0] or not preco54_58 == precos[
                                        8]:  # and not ultimo_reajuste == data_reajuste
                                print("Atualizar Precos! -----")
                                planos_atualizados.append(plano)

                                if ultimo_reajuste == None:
                                    ultimo_reajuste = "null"
                                else:
                                    ultimo_reajuste = datetime.strptime(
                                        str(ultimo_reajuste),
                                        '%Y-%m-%d').date()
                                print(ultimo_reajuste)

                                update = "UPDATE `tbl_preco_faixa_etaria` SET " \
                                         f"`preco0_18`='{precos[0]}', " \
                                         f"`preco19_23`='{precos[1]}', " \
                                         f"`preco24_28`='{precos[2]}', " \
                                         f"`preco29_33`='{precos[3]}', " \
                                         f"`preco34_38`='{precos[4]}', " \
                                         f"`preco39_43`='{precos[5]}', " \
                                         f"`preco44_48`='{precos[6]}', " \
                                         f"`preco49_53`='{precos[7]}', " \
                                         f"`preco54_58`='{precos[8]}', " \
                                         f"`min_vidas`='{min_vidas}', " \
                                         f"`max_vidas`='{max_vidas}', " \
                                         f"`ultimo_reajuste`='{data_reajuste}' " \
                                         f"WHERE `id`='{id}';"
                                print(update)

                                if salvar:
                                    res = cursor.execute(update)
                                else:
                                    res = 1

                                if res == 1:

                                    if ultimo_reajuste == None or ultimo_reajuste == "null":
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); "
                                    else:
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); "

                                    print(insert)
                                    if salvar:
                                        res = cursor.execute(insert)
                                        print(res, "sucesso")

                        elif res == 0:
                            print(
                                "----------------------------- Cadastrar Novo --------------------------------"
                            )
                            print(f'{sql} {values}')
                            ref_plano = True
                            for plan in planos_inseridos:
                                if plan == plano:
                                    ref_plano = False

                            if ref_plano:
                                planos_inseridos.append(f"{plano}")

                            if salvar:

                                if not insertDados(sql, values):
                                    print(
                                        "ERROR: erro ao inserir precos no banco de dados!"
                                    )
                                else:
                                    inseridos += 1
                        elif res > 1:
                            print("Mais de um plano cadastrado")

                    # Colocar em uma lista os planos nao encontrados
                    elif res == 0:
                        print("Nao achou o plano!")
                        ref_plano = True
                        for plan in planos_sem_cadastros:
                            if plan == plano:
                                ref_plano = False

                        if ref_plano:
                            planos_sem_cadastros.append(f"{plano}")
                    elif res > 1:
                        print("Achou mais de um plano!")

                    cursor.close()
                    conn.commit()
                    conn.close()

            num += 1

    # except:
    #     print("Acabou")
    #     # pass
    finally:
        pass
    print(f"Total de preços de planos atualizados: {inseridos}")
예제 #5
0
def verificarAtualizacao(driver, num):
    global data_reajuste
    global id_operadora
    global id_area
    global nome_operadora
    global tipo_contratacao
    global coparticipacao
    global hospitalar
    global regional
    global id_tipo_contratacao
    global id_tipo_empresa

    conn = conexao.myConexao()
    cursor = conn.cursor()

    try:
        WebDriverWait(driver, 30).until(
            EC.presence_of_element_located(
                (By.XPATH, f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/p'))
        )
    except:
        print('Nao achou o elemento da pagina! Tentando novamente')
        verificarAtualizacao(driver, num)

    finally:
        nome_operadora = driver.find_element_by_xpath(
            f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/p').text

        if re.search('HOSPITALAR', nome_operadora):
            tipo_contratacao = 2

        try:
            WebDriverWait(driver, 30).until(
                EC.presence_of_element_located(
                    (By.XPATH, f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/b'))
            )
        except:
            tipo_contratacao = None
        finally:
            if not tipo_contratacao == None:
                tipo_contratacao = str(driver.find_element_by_xpath(
                    f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/b').text)
            pass

    print(nome_operadora)
    print(tipo_contratacao, "\n")

    if re.search('BRADESCO', nome_operadora):
        tag_operadora = nome_operadora
        nome_operadora = str(nome_operadora).split(" ")[0]

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():

            # Pegar a area do plano
            if re.search('INTERIOR 1', tag_operadora):
                area = 'SP INTERIOR 1'
            elif re.search('INTERIOR 2', tag_operadora):
                area = 'SP INTERIOR 2'
            else:
                area = 'SP CAPITAL'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected():
            area = 'RIO DE JANEIRO'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[24]').is_selected():
            area = 'SANTA CATARINA'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected():
            area = 'MATO GROSSO'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected():
            area = 'MATO GROSSO DO SUL'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected():
            area = 'MINAS GERAIS'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[7]').is_selected():
            area = 'ESPIRITO SANTO'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[3]').is_selected():
            area = 'AMAPA'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[16]').is_selected():
            area = 'PARANÁ'
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[4]').is_selected():
            area = 'AMAZONAS'

        coparticipacao = ""
        tipo_contratacao = str(tipo_contratacao).split("-")
        if len(tipo_contratacao) > 1:
            if tipo_contratacao[0].strip().upper() == "MEI":
                id_tipo_empresa = 1

                if tipo_contratacao[0].strip().upper() == "MEI" and len(tipo_contratacao) == 3:
                    coparticipacao = tipo_contratacao[2]

                tipo_contratacao = tipo_contratacao[1].strip()
            else:
                id_tipo_empresa = 2
                coparticipacao = tipo_contratacao[1]
                tipo_contratacao = tipo_contratacao[0].strip()
        else:
            tipo_contratacao = tipo_contratacao[0].strip()
            id_tipo_empresa = 2

        tipo_contratacao = list(tipo_contratacao.lower())
        tipo_contratacao = f"{tipo_contratacao[0] + tipo_contratacao[1] + tipo_contratacao[2]}"

        if re.search('10', coparticipacao):
            coparticipacao = 1
        elif re.search('20', coparticipacao):
            coparticipacao = 3
        elif re.search('30', coparticipacao):
            coparticipacao = 5
        else:
            coparticipacao = 2

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
            coparticipacao = 2
        else:
            hospitalar = 1



    # Verificando apenas AMIL e Amil Facil
    if re.search('AMIL -', str(nome_operadora).upper()) \
            or re.search('AMIL FÁCIL -', str(nome_operadora).upper()) \
            or re.search('AMIL ONE -', str(nome_operadora).upper()):

        tag_operadora = nome_operadora

        if re.search('AMIL FÁCIL -', str(nome_operadora).upper()):
            nome_operadora = str(nome_operadora).split(" -")[0]
        elif re.search('AMIL ONE -', str(nome_operadora).upper()):
            nome_operadora = 'ONE HEALTH'
        else:
            nome_operadora = str(nome_operadora).split(" ")[0]

        # Verificar o estado
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():
            if re.search('INTERIOR', str(tipo_contratacao).upper()) or re.search('INTERIOR',
                                                                                 str(tag_operadora).upper()):
                area = 'SP INTERIOR 1'
            else:
                area = 'SP CAPITAL'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected():
            area = 'RIO DE JANEIRO'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[26]').is_selected():
            area = 'SERGIPE'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected():
            area = 'MINAS GERAIS'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[7]').is_selected():
            area = 'ESPIRITO SANTO'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[24]').is_selected():
            area = 'SANTA CATARINA'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected():
            area = 'MATO GROSSO'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected():
            area = 'MATO GROSSO DO SUL'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[16]').is_selected():
            area = 'PARANÁ'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[4]').is_selected():
            area = 'AMAZONAS'

        if re.search('SEM COPART', str(tag_operadora).upper()):
            coparticipacao = 2
        elif re.search('COM COPART', str(tag_operadora).upper()):
            coparticipacao = 1

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
        else:
            hospitalar = 1

        if re.search('LIVRE ADESÃO', str(tipo_contratacao).upper()):
            tipo_contratacao = 'OPCI'
        elif re.search('COMPULSÓRI', str(tipo_contratacao).upper()):
            tipo_contratacao = 'COMP'

    if re.search('SULAMÉRICA', str(nome_operadora).upper()) and not re.search('COM REMISSÃO',
                                                                              str(tipo_contratacao).upper()):

        tag_operadora = nome_operadora
        nome_operadora = nome_operadora.split(" ")[0]

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():

            if re.search('TARIFA 1', str(tag_operadora).upper()):
                area = 'SP CAPITAL'
            elif re.search('TARIFA 2', str(tag_operadora).upper()):
                area = 'SP INTERIOR 1'
            elif re.search('TARIFA 3', str(tag_operadora).upper()):
                area = 'SP INTERIOR 2'
            else:
                area = 'SP CAPITAL'

            if re.search("CAMPINAS", str(tipo_contratacao).upper()):
                area = 'CAMPINAS'

        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected():
            area = "MINAS GERAIS"
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected():
            area = 'MATO GROSSO'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected():
            area = 'MATO GROSSO DO SUL'

        if re.search('SEM COPART', str(tag_operadora).upper()):
            coparticipacao = 2
        elif re.search('COM COPART', str(tag_operadora).upper()):

            if re.search('10', tipo_contratacao):
                coparticipacao = 1
            elif re.search('20', tipo_contratacao):
                coparticipacao = 3
            elif re.search('30', tipo_contratacao):
                coparticipacao = 5
        else:
            print("ATENÇAO PASSOU DIRETO PELA COPART")
            coparticipacao = 2

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
            coparticipacao = 2
        else:
            hospitalar = 1

        if re.search('COMPULSÓRIO', str(tag_operadora).upper()):
            tipo_contratacao = 'COMP'
        elif re.search('FLEX', str(tag_operadora).upper()):
            tipo_contratacao = 'OPCI'
        else:
            tipo_contratacao = 'OPCI'

    if re.search('SOMPO', str(nome_operadora).upper()):

        tag_operadora = nome_operadora
        nome_operadora = "SOMPO SAÚDE"

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():

            if re.search('SEM COPART', str(tag_operadora).upper()):
                coparticipacao = 2
            elif re.search('COM COPART', str(tag_operadora).upper()):

                if re.search('10', tipo_contratacao):
                    coparticipacao = 1
                elif re.search('20', tipo_contratacao):
                    coparticipacao = 3
                elif re.search('30', tipo_contratacao):
                    coparticipacao = 5

            # Verificar se e hospitalar
            if re.search('HOSPITALAR', tag_operadora):
                hospitalar = 2
            else:
                hospitalar = 1

            if re.search('INTERIOR', str(tag_operadora).upper()):
                area = 'SP INTERIOR 1'
            else:
                area = 'SP CAPITAL'

            if re.search('REGIONAL', str(tipo_contratacao).upper()):
                regional = True
            else:
                regional = False

            if re.search('OPCIONAL', str(tipo_contratacao).upper()):
                tipo_contratacao = 'OPCI'
            else:
                tipo_contratacao = 'COMP'

    if re.search('PORTO SEGURO', str(nome_operadora).upper()):

        tag_operadora = nome_operadora
        nome_operadora = "PORTO SEGURO"

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():

            if re.search('INTERIOR', str(tag_operadora).upper()):
                area = 'SP INTERIOR 1'
            else:
                area = 'SP CAPITAL'

        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected():
            area = 'RIO DE JANEIRO'

        if re.search('SEM COPART', str(tag_operadora).upper()):
            coparticipacao = 2
        elif re.search('COM COPART', str(tag_operadora).upper()):

            if re.search('10', tipo_contratacao):
                coparticipacao = 1
            elif re.search('20', tipo_contratacao):
                coparticipacao = 3
            elif re.search('30', tipo_contratacao):
                coparticipacao = 5

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
        else:
            hospitalar = 1

        if re.search('REGIONAL', str(tipo_contratacao).upper()):
            regional = True
        else:
            regional = False

        if re.search('OPCIONAL', str(tipo_contratacao).upper()):
            tipo_contratacao = 'OPCI'
        else:
            tipo_contratacao = 'COMP'

    if re.search('ALLIANZ', str(nome_operadora).upper()):

        tag_operadora = nome_operadora
        nome_operadora = "ALLIANZ"

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():
            area = 'SP CAPITAL'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected():
            area = 'RIO DE JANEIRO'
        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected():
            area = 'MINAS GERAIS'

        if re.search('SEM COPART', str(tag_operadora).upper()):
            coparticipacao = 2
        elif re.search('COM COPART', str(tag_operadora).upper()):

            if re.search('20% PARA CONSULTAS E EXAMES E 30% PARA PS', str(tipo_contratacao).upper()):
                coparticipacao = 3
            elif re.search('20% PARA CONSULTAS E EXAMES, LIMITADO A', str(tipo_contratacao).upper()):
                coparticipacao = 3
            elif re.search('30% PARA CONSULTAS E EXAMES, LIMITADO A', str(tipo_contratacao).upper()):
                coparticipacao = 5
            else:
                coparticipacao = 0

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
        else:
            hospitalar = 1

        tipo_contratacao = 'COMP'

    if re.search('NOTREDAME', str(nome_operadora).upper()):

        tag_operadora = nome_operadora
        nome_operadora = "NOTREDAME"

        # Verificar de a area e de sao paulo
        if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected():
            if re.search('INTERIOR', str(tag_operadora).upper()) or re.search('SOROCABA',
                                                                              str(tipo_contratacao).upper()):
                area = 'SP INTERIOR 1'
            else:
                area = 'SP CAPITAL'

            if re.search(' MEI', str(tag_operadora).upper()):
                id_tipo_empresa = 1
            else:
                id_tipo_empresa = 2

        elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected():
            area = 'RIO DE JANEIRO'

        if re.search('SEM COPART', str(tag_operadora).upper()):
            coparticipacao = 2
        elif re.search('COM COPART', str(tag_operadora).upper()):
            coparticipacao = 1

        # Verificar se e hospitalar
        if re.search('HOSPITALAR', tag_operadora):
            hospitalar = 2
        else:
            hospitalar = 1

        tipo_contratacao = 'COMP'

    sql = f"SELECT " \
          f"tbl_operadora.id AS id_operadora, " \
          f"tbl_area.id as id_area, " \
          f"tbl_tipo_contratacao.id as id_tipo_contratacao " \
          f"FROM tbl_operadora, tbl_area, tbl_tipo_contratacao " \
          f"WHERE tbl_operadora.titulo like '{nome_operadora}' " \
          f"and tbl_area.area like '%{area}' " \
          f"and tbl_tipo_contratacao.titulo like '%{tipo_contratacao}%';"
    print(sql)
    res = cursor.execute(sql)

    data_reajuste = driver.find_element_by_xpath(
        f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[2]/ul/li[1]').get_attribute(
        'title')
    data_reajuste = str(data_reajuste).split("/")
    data_reajuste = f'{data_reajuste[2]}-{data_reajuste[1]}-{data_reajuste[0]}'

    # Converter a string em objeto tipo Date
    data_reajuste = datetime.strptime(str(data_reajuste), '%Y-%m-%d').date()
    # print(data_reajuste)

    print(res)
    if res > 0:
        select = cursor.fetchall()[0]
        print(select)

        id_operadora = select[0]
        id_area = select[1]
        tipo_contratacao = select[2]
        id_tipo_contratacao = select[2]

        # print(id_operadora, id_area, tipo_contratacao)

    sql = f"select * from tbl_preco_faixa_etaria " \
          f"where id_operadora = {id_operadora} " \
          f"and id_area = {id_area} " \
          f"and hospitalar = {hospitalar} " \
          f"and id_tipo_contratacao = {id_tipo_contratacao} " \
          f"and id_coparticipacao = {coparticipacao} " \
          f"and ultimo_reajuste = '{data_reajuste}';"

    print(f"\n{sql}")

    res = cursor.execute(sql)
    print(res)
    cursor.close()
    conn.close()
    return True
예제 #6
0
def rasparDados(driver):
    # Ativar ou dasativar a persistencia de dados
    salvar = conexao.inserirRegistro()
    updatePrecoPlano = conexao.updatePrecoPlano()

    atualizarDataReajuste = conexao.atualizaDataReajuste()

    global id_operadora
    global nome_operadora
    global nomeOperadoraTitle
    global coparticipacao
    global hospitalar
    global min_vidas
    global min_vidas_pesquisa
    global max_vidas
    global data_reajuste
    global id_administradora
    global id_tipo_contratacao_lead
    global tipo_contratacao
    global id_tipo_contratacao
    global regional
    global id_tipo_empresa
    global estadoSaoPaulo
    global estadoRioDeJaneiro
    global estadoEspiritoSanto
    global estadoMatoGrosso
    global estadoMatoGrossoSul

    qtd_titulares = '1'
    planos_atualizados = []

    conn = conexao.myConexao()
    cursor = conn.cursor()

    print("Obtendo dados")
    time.sleep(5)

    soup = BeautifulSoup(driver.page_source, 'html.parser')
    tables = soup.find_all('table', attrs={"static small ta-c"})

    tablesReembolso = driver.find_elements_by_class_name('bloco')

    for table in tablesReembolso:
        h4s = table.find_elements_by_tag_name('h4')
        refReembolso = False
        for h4 in h4s:
            print(h4.text)
            if re.search("Reembolso", h4.text):
                refReembolso = True

        if refReembolso:
            refReembolso = False

            trsReembolso = table.find_elements_by_tag_name('tr')

            reembolsoArray = []

            for n, tr in enumerate(trsReembolso):
                aux = []
                if n == 0:
                    for td in tr.find_elements_by_tag_name('td'):
                        reembolsoArray.append([td.text])
                if n == 1:
                    for num, td in enumerate(tr.find_elements_by_tag_name('td')):
                        reembolsoArray[num].append(td.text)
            del (reembolsoArray[0])
            print(reembolsoArray)

            for reemb in reembolsoArray:
                planoRee = reemb[0].strip()
                valorRee = str(reemb[1]).split(" ")[1].replace(".", "").replace(",", ".")
                sql = f"UPDATE tbl_tipo_plano SET reembolso = '{valorRee}' " \
                      f"WHERE id_operadora = {id_operadora} AND titulo LIKE '{planoRee}' and id > 0 limit 1;"
                # print(sql)
                if not planoRee == "" and not valorRee == "":
                    res = cursor.execute(sql)
                    # print(res)

    for num_tables in range(1):

        titulo = driver.find_element_by_xpath('//*[@id="geral-content"]/section/div[2]/div[2]/div[1]/p').text
        subTitulo = ""
        try:
            subTitulo = driver.find_element_by_xpath('//*[@id="geral-content"]/section/div[2]/div[2]/div[2]/b').text
        except:
            subTitulo = None
        finally:
            pass

        if nome_operadora == 'BRADESCO':
            if re.search('3 Vidas', titulo):
                min_vidas = 0
                max_vidas = 29

            if re.search('4 vidas', titulo):
                min_vidas = 0
                max_vidas = 29

            if min_vidas_pesquisa == 30:
                min_vidas = 30
                max_vidas = 99
            elif min_vidas_pesquisa == 0:
                min_vidas = 0
                max_vidas = 29

            if re.search('02 Titulares', titulo):
                qtd_titulares = '2'
            elif re.search('01 Titular', titulo):
                qtd_titulares = '1'

        elif re.search('AMIL', nome_operadora) or nome_operadora == 'ONE HEALTH':
            if min_vidas == 0:
                min_vidas = 0
                max_vidas = 29
                qtd_titulares = '1'
            elif min_vidas > 29:
                min_vidas = 30
                max_vidas = 99
                qtd_titulares = '1'

        elif re.search('SULAMÉRICA', nome_operadora):
            if min_vidas == 0:
                min_vidas = 0
                max_vidas = 29
                qtd_titulares = '1'
            elif min_vidas > 29:
                min_vidas = 30
                max_vidas = 99
                qtd_titulares = '1'

            if re.search(' MEI', titulo):
                id_tipo_empresa = 1
            else:
                id_tipo_empresa = 2

            if re.search('FLEX', titulo):
                id_tipo_contratacao = 1
            else:
                id_tipo_contratacao = 2


        elif re.search('SOMPO', nome_operadora):
            if min_vidas == 0:
                min_vidas = 0
                max_vidas = 29
                qtd_titulares = '1'
            elif min_vidas > 29:
                min_vidas = 30
                max_vidas = 99
                qtd_titulares = '1'

        elif re.search('PORTO SEGURO', nome_operadora):
            if min_vidas == 0:
                min_vidas = 0
                max_vidas = 29
                qtd_titulares = '1'
            elif min_vidas > 29:
                min_vidas = 30
                max_vidas = 99
                qtd_titulares = '1'

        elif re.search('ALLIANZ', nome_operadora):
            min_vidas = 0
            max_vidas = 49
            qtd_titulares = '1'

        elif re.search('NOTREDAME', nome_operadora):
            if min_vidas == 0:
                min_vidas = 0
                max_vidas = 29
                qtd_titulares = '1'
            elif min_vidas > 29:
                min_vidas = 30
                max_vidas = 99
                qtd_titulares = '1'

            if re.search(' MEI', titulo):
                id_tipo_empresa = 1
            elif subTitulo is not None:
                if re.search('CNPJ', subTitulo):
                    id_tipo_empresa = 1
                else:
                    id_tipo_empresa = 2
            else:
                id_tipo_empresa = 2

        trs = tables[num_tables + 1].find_all('tr')

        dados = []
        for i, tr in enumerate(trs):
            soup = BeautifulSoup(str(tr), 'html.parser')
            tds = soup.find_all('td')

            # del (tds[0])
            if i == 0:
                for td in tds:
                    aux = [td.text]
                    dados.append(aux)

            if 0 < i < 11:
                for j, td in enumerate(tds):
                    dados[j].append(td.text)

        # print(dados)
        inseridos = 0
        del (dados[0])
        mensagemWhats = f"*ATUALIZAÇÃO DE PREÇOS* \n\n*{nomeOperadoraTitle.upper()}*\n\n"
        mensagemWhatsInicial = mensagemWhats
        for dado in dados:

            print(dado)
            dado[0] = str(dado[0]).replace("(R1)", "R1")
            dado[0] = str(dado[0]).replace("(R2)", "R2")
            dado[0] = str(dado[0]).replace("(R3)", "R3")

            plano_modalidade = str(dado[0]).split("(")

            id_modalidade = plano_modalidade[1].strip().replace(")", "")
            if id_modalidade == "A":
                id_modalidade = 2
            elif id_modalidade == "E":
                id_modalidade = 1
            elif id_modalidade == "AMB":
                id_modalidade = 2
            else:
                print("Modalidade nao encontrada!")
                break

            plano = plano_modalidade[0].strip()

            # Variacao de nome de planos AMIL
            if plano == 'AMIL FÁCIL 50 ABC / BX':
                plano = 'AMIL FÁCIL 50 ABC'

            # Variacao do nome do plano AMIL - Estado RJ
            if estadoRioDeJaneiro:
                if plano == 'AMIL CO330' and id_modalidade == 2:
                    plano = 'AMIL CO330 Q'
                elif plano == 'AMIL CO330' and id_modalidade == 1:
                    plano = 'AMIL CO330 E'

            if regional:
                plano = f"{plano} REGIONAL"

            if (re.search('CLASSICO', plano) or re.search('CLÁSSICO',
                                                          plano)) and id_operadora == 12 and id_modalidade == 1:
                plano = "CLÁSSICO ENF"
            elif (re.search('CLASSICO', plano) or re.search('CLÁSSICO',
                                                            plano)) and id_operadora == 12 and id_modalidade == 2:
                plano = "CLÁSSICO APT"

            if (re.search('CLASSICO', plano) or re.search('CLÁSSICO', plano)) and (
                    id_operadora == 2 or id_operadora == 5 or id_operadora == 8):
                if id_modalidade == 1:
                    plano = "CLÁSSICO ENF"
                elif id_modalidade == 2:
                    plano = "CLÁSSICO APT"

            if id_operadora == 3:
                if plano == 'TNW':
                    plano = 'TNO'
                elif plano == 'TNPX':
                    plano = 'TNP 10'
                elif plano == 'FCX':
                    plano = 'FLEX'

            if id_operadora == 11:
                if plano == 'OURO MAIS' and id_modalidade == 2:
                    plano = 'OURO MAIS Q'
                elif plano == 'OURO MAX' and id_modalidade == 2:
                    plano = 'OURO MAX Q'

            # Verificar qual o modelo de copart da ALLIANZ
            if re.search('ALLIANZ', nome_operadora):

                if plano == 'ESSENCIAL 20':
                    plano = 'ESSENCIAL 10'

                if subTitulo is not None:
                    if re.search('20% PARA CONSULTAS E EXAMES, LIMITADO A',
                                 str(subTitulo).upper()) and nome_operadora == 'ALLIANZ':
                        plano = f"{plano} M2"

            # Variacao de nome de planos SULAMERICA
            if re.search('SULAMÉRICA', nome_operadora):
                plano = plano.replace("- ", "")

                # variaçoes dos nomes dos planos (FORMATACAO)
                plano = plano.split('PREMIUM')[0].strip()
                plano = plano.split('SUPREMO')[0].strip()

            if re.search('NOTREDAME', nome_operadora):

                if plano == 'SMART 200 - SP CAPITAL':
                    plano = 'SMART 200 - SP'

                plano = plano.replace("-", "")

            nome_plano = plano
            plano = plano.replace(" ", "")

            sql = f"select * from tbl_tipo_plano " \
                  f"where id_operadora = {id_operadora} and replace(titulo, ' ', '') like '{plano.upper()}';"
            print(sql)
            res = cursor.execute(sql)
            valores = []
            # print(res)

            if res > 0:
                result_select = cursor.fetchall()[0]
                print(result_select)
                id_plano = result_select[0]
                id_categoria_plano = result_select[3]
                if id_plano > 0:
                    for i, valor in enumerate(dado):
                        if i > 0:
                            valores.append(float(str(valor).split(" ")[1].replace(".", "").replace(",", ".")))

                    sql = "insert into tbl_preco_faixa_etaria (" \
                          "id_area, " \
                          "id_categoria_plano, " \
                          "id_coparticipacao, " \
                          "id_modalidade, " \
                          "id_operadora, " \
                          "id_tipo_contratacao, " \
                          "id_tipo_plano, " \
                          "preco0_18, " \
                          "preco19_23, " \
                          "preco24_28, " \
                          "preco29_33, " \
                          "preco34_38, " \
                          "preco39_43, " \
                          "preco44_48, " \
                          "preco49_53, " \
                          "preco54_58, " \
                          "preco_m59, " \
                          "qtd_titulares, " \
                          "id_sindicato, " \
                          "hospitalar, " \
                          "min_vidas, " \
                          "max_vidas, " \
                          "id_tipo_empresa, " \
                          "id_administradora, " \
                          "ultimo_reajuste, " \
                          "id_tipo_contratacao_lead, " \
                          "id_tipo_tabela ) " \
                          "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"

                    values = (
                        id_area,  # id_area
                        id_categoria_plano,  # id_categoria_plano
                        coparticipacao,  # id_coparticipacao
                        id_modalidade,  # id_modalidade,
                        id_operadora,  # id_operadora
                        id_tipo_contratacao,  # id_tipo_contratacao
                        id_plano,  # id_tipo_plano
                        valores[0],  # preco0_18
                        valores[1],  #
                        valores[2],
                        valores[3],
                        valores[4],
                        valores[5],
                        valores[6],
                        valores[7],
                        valores[8],
                        valores[9],  # preco_m59
                        qtd_titulares,  # qtd_titulares
                        None,  # id_sindicato
                        hospitalar,  # hospitalar
                        min_vidas,  # min_vidas
                        max_vidas,  # max_vidas
                        id_tipo_empresa,  # id_tipo_empresa
                        id_administradora,  # id_administradora
                        data_reajuste,  # ultimo_reajuste
                        id_tipo_contratacao_lead,  # id_tipo_contratacao_lead
                        id_tipo_tabela  # id_tipo_tabela
                    )

                    teste = "select * from tbl_preco_faixa_etaria " \
                            f"where id_area = {id_area} and id_operadora = {id_operadora} and id_tipo_plano = {id_plano} and id_modalidade = '{id_modalidade}' " \
                            f"and id_tipo_contratacao = {tipo_contratacao} and id_coparticipacao = {coparticipacao} and qtd_titulares = {qtd_titulares} " \
                            f"and min_vidas = {min_vidas} and max_vidas = {max_vidas} and id_sindicato is null and id_tipo_empresa = {id_tipo_empresa} and hospitalar = {hospitalar};"
                    print(teste)
                    res = cursor.execute(teste)
                    print()

                    print(values, " -- extraidos do simulador")

                    if res == 1:
                        select = cursor.fetchall()[0]

                        id = select[0]
                        preco0_18 = select[8]
                        preco59 = select[17]
                        ultimo_reajuste = select[25]

                        print(select[1:28], f"ID: {id} -- banco de dados")

                        # Condicao para alterar a data do reajuste caso os precos estejam iguais mais sem data
                        if (ultimo_reajuste is None or not (ultimo_reajuste == data_reajuste)) and preco0_18 == valores[
                            0]:
                            print('Atualizar Data')
                            update = f"UPDATE `tbl_preco_faixa_etaria` SET `ultimo_reajuste`='{data_reajuste}', status = 1 WHERE `id`='{id}';"
                            print(update)
                            if atualizarDataReajuste:
                                cursor.execute(update)

                        # print(type(preco0_18), type(valores[0]))
                        # print(preco0_18, valores[0])

                        if not preco0_18 == valores[0] or not preco59 == valores[9]:  # and not ultimo_reajuste == data_reajuste
                            print("Atualizar Precos! -----")
                            planos_atualizados.append(plano)

                            if ultimo_reajuste == None:
                                ultimo_reajuste = "null"
                            else:
                                ultimo_reajuste = datetime.strptime(str(ultimo_reajuste), '%Y-%m-%d').date()
                            print(ultimo_reajuste)

                            update = "UPDATE `tbl_preco_faixa_etaria` SET " \
                                     f"`preco0_18`='{valores[0]}', " \
                                     f"`preco19_23`='{valores[1]}', " \
                                     f"`preco24_28`='{valores[2]}', " \
                                     f"`preco29_33`='{valores[3]}', " \
                                     f"`preco34_38`='{valores[4]}', " \
                                     f"`preco39_43`='{valores[5]}', " \
                                     f"`preco44_48`='{valores[6]}', " \
                                     f"`preco49_53`='{valores[7]}', " \
                                     f"`preco54_58`='{valores[8]}', " \
                                     f"`preco_m59`='{valores[9]}'," \
                                     f"`min_vidas`='{min_vidas}', " \
                                     f"`max_vidas`='{max_vidas}', " \
                                     f"`status`='1', " \
                                     f"`ultimo_reajuste`='{data_reajuste}' " \
                                     f"WHERE `id`='{id}';"
                            print(update)

                            if updatePrecoPlano:
                                res = cursor.execute(update)
                                mensagemWhats += f"Plano: *{nome_plano}* | Numero vidas: {min_vidas}-{max_vidas} \n" \
                                                 f"Preço antigo preco0_18: R$ {select[8]} | Atualizado preco0_18: R$ {valores[0]}\n" \
                                                 f"Preço antigo preco_m59: R$ {select[17]} | Atualizado preco_m59: R$ {valores[9]}\n\n"
                                conn.commit()
                            else:
                                res = 1

                            # print(res)
                            if res == 1 and updatePrecoPlano:

                                if ultimo_reajuste == None or ultimo_reajuste == "null":
                                    insert = "insert into tbl_historico_precos_planos " \
                                             "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \
                                             "values " \
                                             f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); "
                                else:
                                    insert = "insert into tbl_historico_precos_planos " \
                                             "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \
                                             "values " \
                                             f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); "

                                print(insert)
                                if salvar:
                                    res = cursor.execute(insert)
                                    print(res, "sucesso")

                            # if not insertDados(sql, values):
                            #     print("ERROR: erro ao inserir precos no banco de dados!")
                            # else:
                            #     print("Deletando registro desatualizado")
                            #     delete = f"delete from tbl_preco_faixa_etaria where id = {id}"
                            #     cursor.execute(delete)
                        elif preco0_18 == valores[0] and preco59 == valores[9]:
                            updateStatus = "UPDATE `tbl_preco_faixa_etaria` SET " \
                                           f"status = '1' " \
                                           f"WHERE `id`='{id}';"
                            cursor.execute(updateStatus)
                    elif res == 0:
                        print("------------------------------- Cadastrar Novo")
                        print(f'{sql} {values}')

                        if salvar:
                            # if False:

                            if not insertDados(sql, values):
                                print("ERROR: erro ao inserir precos no banco de dados!")
                            else:
                                inseridos += 1
                    elif res > 1:
                        print("Mais de um plano cadastrado")

                # print(values ,",")

            # Colocar em uma lista os planos nao encontrados
            elif res == 0:
                ref_plano = True
                for plan in planos_sem_cadastros:
                    if plan == nome_plano:
                        ref_plano = False

                if ref_plano:
                    planos_sem_cadastros.append(f"{nome_plano}")

        if not mensagemWhats == mensagemWhatsInicial:
            apiWhats.sendMessageAlert(message=mensagemWhats, number=getNumbersWhatsNotificationPrice)
        print(f"Total de preços de planos atualizados: {inseridos}")
    cursor.close()
    conn.commit()
    conn.close()

    print(f"Planos que nao foram encontrados: \n {planos_sem_cadastros}")
    print(f"Planos que sofreram alteracoes: \n {planos_atualizados}")

    # Exportar para o arquivo planos.txt os planos que não foram encontrados
    for plano in planos_sem_cadastros:
        arquivo.seek(0)
        arquivo.truncate()
        planos = arquivo.read()

        if plano not in planos:
            arquivo.write(plano)
            arquivo.write("\n")
def obterDados(driver, tipo_tabela_option, administradora_option,
               operadora_option, entidade_option):
    global hospitalar
    global id_coparticipacao
    global id_operadora
    global min_vidas

    global nome_administradora_option
    global nome_operadora_option
    global nome_entidade_option
    global ultimo

    conn = conexao.myConexao()
    cursor = conn.cursor()

    # desmarcar as informaçoes opcionais
    for i in range(5):
        driver.find_element_by_id(f"simulacao_info_{str(i)}").click()

    # colocar no minimo uma vida por faixa_etaria
    for i in range(10):
        # driver.find_element_by_xpath(f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(Keys.DELETE)
        driver.find_element_by_xpath(
            f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').clear()
        if min_vidas >= 29 and i == 5:
            driver.find_element_by_xpath(
                f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(30)
        else:
            driver.find_element_by_xpath(
                f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(1)

    # TIPO DE PLANO -> saude
    driver.find_element_by_xpath(
        '//*[@id="simulacao_tipoPlano"]/option[2]').click()

    # Tipo de Tabela
    driver.find_element_by_xpath(
        f'//*[@id="simulacao_tipoTabela"]/option[{tipo_tabela_option}]').click(
        )
    while aguardandoCarregamento(
            "display: block; position: static; zoom: 1;",
            driver.find_element_by_id('div-adesao').get_attribute('style')):
        pass

    try:
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((
                By.XPATH,
                f'//*[@id="simulacao_adesao_administradora"]/option[{administradora_option}]'
            )))
    except:
        print("Nao achou a administradora!")
        driver.close()
        exec()
    finally:
        pass

    # Selecionar a Adimistradora
    administradora = driver.find_element_by_xpath(
        f'//*[@id="simulacao_adesao_administradora"]/option[{administradora_option}]'
    )
    nome_administradora_option = administradora.text
    if nome_administradora_option != '':
        administradora.click()
        while aguardandoCarregamento(
                "display: block; position: static; zoom: 1;",
                driver.find_element_by_id('div-adesao').get_attribute(
                    'style')):
            pass
        try:
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((
                    By.XPATH,
                    f'//*[@id="simulacao_adesao_opes"]/option[{operadora_option}]'
                )))
        except:
            print("Nao achou a Operadora!")
            driver.close()
            exec()
        finally:
            pass

        # Selecionando a operadora
        operadora = driver.find_element_by_xpath(
            f'//*[@id="simulacao_adesao_opes"]/option[{operadora_option}]')
        nome_operadora_option = operadora.text
        # print("selecionando operadora")
        if nome_operadora_option != '':

            # variaçoes dos nomes AMIL
            if re.search('AMIL', operadora.text):
                nome_operadora = str(operadora.text).split('-')[0].strip()
            else:
                nome_operadora = str(operadora.text).split(' ')[0]

            sql = f"select * from tbl_operadora where titulo like '{nome_operadora}';"
            # print(sql)
            res = cursor.execute(sql)
            if res > 0:
                # print("Achou a operadora!")
                id_operadora = cursor.fetchall()[0][0]

                if re.search('COM COPART', operadora.text):
                    id_coparticipacao = 1
                elif re.search('SEM COPART', operadora.text):
                    id_coparticipacao = 2
                elif re.search('HOSPITALAR', operadora.text):
                    id_coparticipacao = 2
                    hospitalar = 2

                operadora.click()
                while aguardandoCarregamento(
                        "display: block; position: static; zoom: 1;",
                        driver.find_element_by_id('div-adesao').get_attribute(
                            'style')):
                    pass
                try:
                    WebDriverWait(driver, 10).until(
                        EC.presence_of_element_located((
                            By.XPATH,
                            f'//*[@id="simulacao_adesao_entidade"]/option[{entidade_option}]'
                        )))
                except:
                    print("Nao achou a Entidade!")
                    driver.close()
                    exec()
                finally:
                    pass
                # print("selecionando entidade")
                entidades_selecionada = driver.find_element_by_xpath(
                    f'//*[@id="simulacao_adesao_entidade"]/option[{entidade_option}]'
                )
                nome_entidade_option = entidades_selecionada.text
                entidades_selecionada.click()
                while aguardandoCarregamento(
                        "display: block; position: static; zoom: 1;",
                        driver.find_element_by_id('div-adesao').get_attribute(
                            'style')):
                    pass

                # quantidade de entidades
                quantidade_operadoras = len(
                    driver.find_element_by_id('simulacao_adesao_entidade').
                    find_elements_by_tag_name('option')) - 1
                # print('Quantidade de Entidades:', quantidade_operadoras)

                # pesquisar
                driver.find_element_by_id('btn-get-planos').click()
                # while aguardandoCarregamento("position: static; zoom: 1; margin-top: 0px;", driver.find_element_by_id('div-planos').get_attribute('style')):
                #     pass
                try:
                    WebDriverWait(driver, 15).until(
                        EC.presence_of_element_located(
                            (By.CLASS_NAME, 'sim-op-planos')))
                finally:
                    time.sleep(1)
                    quantidade_results = len(
                        driver.find_elements_by_class_name('sim-op-planos'))
                    print(f"Achou {quantidade_results} na pesquisa!")

                    count = 0
                    for i in range(0, quantidade_results, 2):

                        # print(f"\nLendo resultados {i} e {i + 1} ...")

                        if i >= 0 and i <= 1000:
                            print(f"\nLendo resultados {i + 1} e {i + 2} ...")
                            if count > 0:
                                simulacaoAdesao(driver, administradora_option,
                                                operadora_option,
                                                entidade_option)

                            count = 1

                            try:
                                WebDriverWait(driver, 15).until(
                                    EC.presence_of_element_located(
                                        (By.CLASS_NAME, 'sim-op-planos')))
                            finally:

                                entidade_nome = driver.find_element_by_xpath(
                                    f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/span/strong'
                                ).text
                                sql = f"select * from tbl_sindicato where titulo like '%{entidade_nome}%';"
                                res = cursor.execute(sql)
                                if res > 0:
                                    id_sindicato = cursor.fetchall()[0][0]

                                    data_reajuste = driver.find_element_by_xpath(
                                        f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[2]/ul/li[1]'
                                    ).get_attribute('title')
                                    data_reajuste = str(data_reajuste).split(
                                        "/")
                                    data_reajuste = f'{data_reajuste[2]}-{data_reajuste[1]}-{data_reajuste[0]}'

                                    tipo_area = str(
                                        driver.find_element_by_xpath(
                                            f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/b'
                                        ).text).split("-")

                                    if len(tipo_area) > 1:

                                        area_nome = str(
                                            driver.find_element_by_xpath(
                                                f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/b'
                                            ).text).split("-")[1].strip()

                                        sql = f"select * from tbl_area where area like '%{area_nome}%';"
                                        res = cursor.execute(sql)
                                        if res > 0:
                                            id_area = cursor.fetchall()[0][0]
                                        else:
                                            print(
                                                "Nao achou a area Selecionada")
                                    else:
                                        if str(
                                                driver.find_element_by_xpath(
                                                    '//*[@id="simulacao_regiao"]/option[25]'
                                                ).text) == "São Paulo":
                                            id_area = 1

                                    sql = f"select * from tbl_preco_faixa_etaria where id_operadora = {id_operadora} and id_sindicato = {id_sindicato} and ultimo_reajuste = '{data_reajuste}' and id_area = {id_area} and hospitalar = {hospitalar};"
                                    res = cursor.execute(sql)
                                    if res >= 0:
                                        # if res > 0:
                                        # print(f"Nome do sindicato '{entidade_nome}'")

                                        if i + 1 >= quantidade_results:
                                            driver.execute_script(
                                                f"document.getElementsByClassName('select-all')[{i}].click();"
                                            )
                                            ultimo = True
                                        else:
                                            driver.execute_script(
                                                f"document.getElementsByClassName('select-all')[{i}].click();"
                                                f"document.getElementsByClassName('select-all')[{i + 1}].click();"
                                            )
                                        time.sleep(0.5)

                                        driver.execute_script(
                                            "document.getElementById('btSubmit').click()"
                                        )
                                        time.sleep(0.5)

                                        pegarDados(driver, cursor,
                                                   id_sindicato, data_reajuste)

                                        driver.execute_script("history.back()")
                                        time.sleep(0.5)

    cursor.close()
    conn.commit()
    conn.close()
예제 #8
0
from datetime import datetime

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

import time
import re

from src.acesso import getNumbersWhatsNotificationPrice
from src.db import conexao
from src.repository import AreaRepository
from src.services import apiWhats

conn = conexao.myConexao()
cursor = conn.cursor()

salvar = conexao.inserirRegistro()
atualizarDataReajuste = conexao.atualizaDataReajuste()
updatePrecoPlano = conexao.updatePrecoPlano()

idArea = 0
textBox = ""
estadoNome = ""


def insertDados(sql, values):
    conn = conexao.myConexao()
    cursor = conn.cursor()
    res = cursor.execute(sql, values)
def obterPrecos(driver):

    escolherOperadora = "SOMPO"

    driver.get(getSiteAffinity)

    driver.switch_to.frame(driver.find_element_by_xpath("//*[@id='frame']"))

    login(driver)

    try:
        # element = WebDriverWait(driver, 20).until(
        #     EC.presence_of_element_located((By.ID, "sidebar-nav"))
        # )
        time.sleep(4)
    finally:
        driver.find_elements_by_class_name("dropdown-toggle")[1].click()
        time.sleep(1)
        driver.find_elements_by_class_name("dropdown-toggle")[2].click()
        time.sleep(1)
        driver.find_elements_by_class_name("dropdown-toggle")[5].click()

        liSubMenuPme = driver.find_elements_by_class_name(
            "active")[-1].find_elements_by_tag_name("li")

        links = []

        for i, li in enumerate(liSubMenuPme):
            nomeOperadoraCompletaLi = li.text.upper()
            operadora = str(li.text).split(" ")[0].upper()

            if re.search(escolherOperadora.upper(), nomeOperadoraCompletaLi):

                resOperadora = operadoraRepository.getOperadoraByName(
                    escolherOperadora.upper())
                link = li.find_elements_by_tag_name('a')[0].get_attribute(
                    'href')

                if len(resOperadora) >= 1:
                    links.append(link)
                    print(operadora, link)

        count = 0
        for url in links:
            driver.get(url)

            try:
                # WebDriverWait(driver, 15).until(
                #     EC.presence_of_element_located((By.ID, "main"))
                # )
                time.sleep(3)
            except Exception as e:
                print(e)
            finally:
                estados = driver.find_elements_by_class_name(
                    'produto-selector')[0].find_elements_by_tag_name('a')

                rowsEstados = len(estados)
                print(f"Numero de links {rowsEstados}")
                for j, estado in enumerate(estados):
                    time.sleep(4)

                    # Area
                    id_area = 0
                    if re.search('Grupo de Estados', estado.text):
                        id_area = 1
                    elif re.search('Interior/SP', estado.text):
                        id_area = 2
                    elif re.search('Rio de Janeiro', estado.text):
                        id_area = 4
                    print(id_area)
                    if id_area > 0:
                        print(f"Pegar preços de {id_area}")

                    if j > 0:
                        print("Click")
                        estado.click()

        breakpoint()
        exit()
        breakpoint()
    planos_atualizados = []
    planos_sem_cadastros = []
    planos_inseridos = []
    salvar = conexao.inserirRegistro()
    inseridos = 0

    id_operadora = 12
    id_area = 4

    try:
        num = 1

        while True:

            try:
                refTable = driver.find_element_by_xpath(
                    f'//*[@id="tab-produto"]/div/h4[{num}]')
            except:
                print("element no ionterable")
                refTable = False
                break
            finally:
                pass

            titulo = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/h4[{num}]').text
            validade = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/p[{num}]').text
            print(f"\nLendo {num}")
            print(titulo)
            print(validade)

            titulo = str(titulo).upper()
            qtd_titulares = '1'
            hospitalar = 1
            min_vidas = None
            max_vidas = None
            if re.search('03 A 29 VIDAS', titulo):
                min_vidas = 0
                max_vidas = 29
            elif re.search('30 A 99 VIDAS', titulo):
                min_vidas = 30
                max_vidas = 0

            if re.search("HOSPITALAR", titulo):
                hospitalar = 2

            if re.search("SEM COPAR", titulo):
                id_coparticipacao = 2
            elif re.search('COM 20% DE COPART', titulo):
                id_coparticipacao = 3
            elif re.search('COM 30% DE COPART', titulo):
                id_coparticipacao = 5

            if re.search("COMPULSÓRIO", titulo):
                id_tipo_contratacao = 2
            else:
                id_tipo_contratacao = 1

            planos = driver.find_element_by_xpath(
                f'//*[@id="tab-produto"]/div/table[{num}]/thead'
            ).find_elements_by_tag_name('th')

            planosArray = []
            for plano in planos:
                planosArray.append(plano.text)

            # del(planosArray[0])
            print(planosArray)

            for i, plano in enumerate(planosArray):
                # print("num",i)
                precos = []
                for j in range(10):
                    if i > 0:
                        preco = driver.find_element_by_xpath(
                            f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j + 1}]/td[{i + 1}]'
                        ).text
                        precos.append(
                            float(
                                str(preco).replace(".", "").replace(",", ".")))

                if i > 0:
                    print(precos)

                    nomePlano = str(plano).split('[')
                    plano = nomePlano[0].strip().upper()
                    modalidade = nomePlano[1].split(']')[0].strip()
                    id_modalidade = 0

                    if modalidade == "E":
                        id_modalidade = 1

                        if plano == "CLASSICO":
                            plano = "CLÁSSICO ENF"

                    elif modalidade == "A":
                        id_modalidade = 2

                        if plano == "nao e so na sua rua ":
                            plano = "CLÁSSICO APT"

                    conn = conexao.myConexao()
                    cursor = conn.cursor()

                    sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = {id_operadora};"
                    print(sql)
                    res = cursor.execute(sql)
                    # print(res)
                    if res == 1:
                        result_select = cursor.fetchall()[0]
                        print(result_select)
                        id_plano = result_select[0]
                        id_categoria_plano = result_select[3]

                        id_tipo_empresa = 2
                        id_administradora = 0
                        data_reajuste = '2021-04-01'
                        id_tipo_contratacao_lead = 0
                        id_tipo_tabela = None

                        print("id_area => ", id_area)
                        print("id_categoria_plano => ", id_categoria_plano)
                        print("id_coparticipacao => ", id_coparticipacao)
                        print("id_modalidade => ", id_modalidade)
                        print("id_operadora => ", id_operadora)
                        print("id_tipo_contratacao => ", id_tipo_contratacao)
                        print("id_plano => ", id_plano)
                        print("preco0_18 => ", precos[0])
                        print("preco_m59 => ", precos[9])
                        print("qtd_titulares => ", qtd_titulares)
                        print("hospitalar => ", hospitalar)
                        print("min_vidas => ", min_vidas)
                        print("max_vidas => ", max_vidas)
                        print("id_tipo_empresa => ", id_tipo_empresa)
                        print("id_administradora => ", id_administradora)
                        print("data_reajuste => ", data_reajuste)
                        print("id_tipo_contratacao_lead => ",
                              id_tipo_contratacao_lead)
                        print("id_tipo_tabela => ", id_tipo_tabela)

                        sql = "insert into tbl_preco_faixa_etaria (" \
                              "id_area, " \
                              "id_categoria_plano, " \
                              "id_coparticipacao, " \
                              "id_modalidade, " \
                              "id_operadora, " \
                              "id_tipo_contratacao, " \
                              "id_tipo_plano, " \
                              "preco0_18, " \
                              "preco19_23, " \
                              "preco24_28, " \
                              "preco29_33, " \
                              "preco34_38, " \
                              "preco39_43, " \
                              "preco44_48, " \
                              "preco49_53, " \
                              "preco54_58, " \
                              "preco_m59, " \
                              "qtd_titulares, " \
                              "id_sindicato, " \
                              "hospitalar, " \
                              "min_vidas, " \
                              "max_vidas, " \
                              "id_tipo_empresa, " \
                              "id_administradora, " \
                              "ultimo_reajuste, " \
                              "id_tipo_contratacao_lead, " \
                              "id_tipo_tabela ) " \
                              "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"

                        values = (
                            id_area,  # id_area
                            id_categoria_plano,  # id_categoria_plano
                            id_coparticipacao,  # id_coparticipacao
                            id_modalidade,  # id_modalidade,
                            id_operadora,  # id_operadora
                            id_tipo_contratacao,  # id_tipo_contratacao
                            id_plano,  # id_tipo_plano
                            precos[0],  # preco0_18
                            precos[1],  #
                            precos[2],
                            precos[3],
                            precos[4],
                            precos[5],
                            precos[6],
                            precos[7],
                            precos[8],  # preco54_58
                            precos[9],
                            qtd_titulares,  # qtd_titulares
                            None,  # id_sindicato
                            hospitalar,  # hospitalar
                            min_vidas,  # min_vidas
                            max_vidas,  # max_vidas
                            id_tipo_empresa,  # id_tipo_empresa
                            id_administradora,  # id_administradora
                            data_reajuste,  # ultimo_reajuste
                            id_tipo_contratacao_lead,  # id_tipo_contratacao_lead
                            id_tipo_tabela  # id_tipo_tabela
                        )
                        # print(values)

                        teste = "select * from tbl_preco_faixa_etaria " \
                                f"where id_area = {id_area} " \
                                f"and id_operadora = {id_operadora} " \
                                f"and id_tipo_plano = {id_plano} " \
                                f"and id_modalidade = {id_modalidade} " \
                                f"and id_tipo_contratacao = {id_tipo_contratacao} " \
                                f"and id_coparticipacao = {id_coparticipacao} " \
                                f"and qtd_titulares = {qtd_titulares} " \
                                f"and min_vidas = {min_vidas} " \
                                f"and id_sindicato is null " \
                                f"and id_tipo_empresa = {id_tipo_empresa} " \
                                f"and hospitalar = {hospitalar};"
                        print(teste)
                        res = cursor.execute(teste)

                        print(values, " -- extraidos do simulador")
                        if res == 1:
                            select = cursor.fetchall()[0]
                            id = select[0]
                            preco0_18 = select[8]
                            preco59 = select[17]
                            ultimo_reajuste = select[25]

                            print(select[1:28], f"ID: {id} -- banco de dados")
                            if not preco0_18 == precos[
                                    0] or not preco59 == precos[
                                        9]:  # and not ultimo_reajuste == data_reajuste
                                print("Atualizar Precos! -----")
                                planos_atualizados.append(plano)

                                if ultimo_reajuste == None:
                                    ultimo_reajuste = "null"
                                else:
                                    ultimo_reajuste = datetime.strptime(
                                        str(ultimo_reajuste),
                                        '%Y-%m-%d').date()
                                print(ultimo_reajuste)

                                update = "UPDATE `tbl_preco_faixa_etaria` SET " \
                                         f"`preco0_18`='{precos[0]}', " \
                                         f"`preco19_23`='{precos[1]}', " \
                                         f"`preco24_28`='{precos[2]}', " \
                                         f"`preco29_33`='{precos[3]}', " \
                                         f"`preco34_38`='{precos[4]}', " \
                                         f"`preco39_43`='{precos[5]}', " \
                                         f"`preco44_48`='{precos[6]}', " \
                                         f"`preco49_53`='{precos[7]}', " \
                                         f"`preco54_58`='{precos[8]}', " \
                                         f"`preco_m59`='{precos[9]}', " \
                                         f"`min_vidas`='{min_vidas}', " \
                                         f"`max_vidas`='{max_vidas}', " \
                                         f"`ultimo_reajuste`='{data_reajuste}' " \
                                         f"WHERE `id`='{id}';"
                                print(update)

                                if salvar:
                                    res = cursor.execute(update)
                                else:
                                    res = 1

                                if res == 1:

                                    if ultimo_reajuste == None or ultimo_reajuste == "null":
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); "
                                    else:
                                        insert = "insert into tbl_historico_precos_planos " \
                                                 "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \
                                                 "values " \
                                                 f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); "

                                    print(insert)
                                    if salvar:
                                        res = cursor.execute(insert)
                                        print(res, "sucesso")

                        elif res == 0:
                            print(
                                "----------------------------- Cadastrar Novo --------------------------------"
                            )
                            print(f'{sql} {values}')
                            ref_plano = True
                            for plan in planos_inseridos:
                                if plan == plano:
                                    ref_plano = False

                            if ref_plano:
                                planos_inseridos.append(f"{plano}")

                            if salvar:

                                if not insertDados(sql, values):
                                    print(
                                        "ERROR: erro ao inserir precos no banco de dados!"
                                    )
                                else:
                                    inseridos += 1
                        elif res > 1:
                            print("Mais de um plano cadastrado")

                    # Colocar em uma lista os planos nao encontrados
                    elif res == 0:
                        print("Nao achou o plano!")
                        ref_plano = True
                        for plan in planos_sem_cadastros:
                            if plan == plano:
                                ref_plano = False

                        if ref_plano:
                            planos_sem_cadastros.append(f"{plano}")
                    elif res > 1:
                        print("Achou mais de um plano!")

                    cursor.close()
                    conn.commit()
                    conn.close()

            num += 1

    # except:
    #     print("Acabou")
    #     # pass
    finally:
        pass
    print(f"Total de preços de planos atualizados: {inseridos}")
def notificacao(driver):

    conn = conexao.myConexao()

    try:
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.ID, 'twitter-widget-0')))
    except:
        driver.find_elements_by_class_name("icone exit extend")[0].click()
        login.login(driver)

    finally:
        try:
            WebDriverWait(driver, 5).until(
                EC.presence_of_element_located((By.ID, 'twitter-widget-0')))
        finally:
            pass
        driver.switch_to.frame(driver.find_element_by_id('twitter-widget-0'))

        timeLine = driver.find_elements_by_class_name("timeline-Tweet-text")

        cursor = conn.cursor()
        sql = "SELECT * FROM tbl_operadora;"
        cursor.execute(sql)
        operadoras = cursor.fetchall()

        numbers = acesso.getNumbersWhatsNotificationPrice

        count = 0
        for operadora in operadoras:
            nomeOperadora = operadora[1]

            for line in timeLine:
                if re.search(nomeOperadora.upper(), str(line.text).upper()):

                    for number in numbers:
                        # Enviar notificaçao pelo whats
                        message = "*Notificaçao do simulador online*\n\n" \
                                  f"{line.text}"

                        select = f"select count(id) as qtt from tbl_log_whatsapp_msg " \
                                 f"where numero like '%{number}%' and mensagem like '%{message}%';"
                        cursor.execute(select)
                        resSelect = cursor.fetchone()
                        qtt = resSelect[0]

                        if qtt == 0:
                            res = apiWhats.sendMessageAlert(message=message,
                                                            number=number)

                            if res:
                                if int(res.status_code) == 200:
                                    count += 1
                                    print("Mensagem Enviada com Sucesso!")
                                    insert = f"INSERT INTO tbl_log_whatsapp_msg(numero, mensagem, retorno) " \
                                             f"values ('{number}', '{message}', '{res.text}');"
                                    cursor.execute(insert)
                                    conn.commit()
                                else:
                                    print(
                                        f"Erro ao enviar a mensagem! STATUS CODE -> {res}"
                                    )
                            else:
                                print(f"Envio de mensagem (status): {res}")
                        else:
                            print(
                                "Mensagem ja consta como enviada no sistema!")

        # CAso nao tenha nenhuma atualização de preços, parar o processo
        if count == 0:
            message = "*Nenhuma* notificaçao de atualização de preços!"
            print(message)
            # res = apiWhats.sendMessage(message=message, number=number)

    driver.switch_to.default_content()
    cursor.close()
    conn.commit()
    conn.close()
예제 #11
0
def simulador(driver):

    global count
    count += 1
    try:
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located(
                (By.XPATH,
                 '//*[@id="geral-content"]/nav/ul/li[2]/ul/li[1]/a')))
    except:
        print("Nao achou a aba do simulador")
        if count == 3:
            driver.close()
            exit()
        simulador(driver)
    finally:

        # Notificaçao de atualizaçao de preços, Pagina de boas vindas do simulador
        notificacao.notificacao(driver=driver)

        # acessar area de simulacao
        driver.execute_script("document.getElementsByTagName('a')[5].click()")

        try:
            WebDriverWait(driver, 15).until(
                EC.presence_of_element_located((By.ID, 'simulacao__token')))
        except:
            print("Nao abriu a pagina de simulacao")
            driver.close
            exit()
            # simulador(driver)
        finally:

            # SIMULAÇAO

            # TIPO DE PLANO -> saude
            driver.find_element_by_xpath(
                '//*[@id="simulacao_tipoPlano"]/option[2]').click()

            pesquisa = False
            if pesquisa:

                # Selecionar o tipo de tabela
                print("Seleciona o tipo de tabela!")
                while driver.find_element_by_xpath(
                        '//*[@id="simulacao_tipoTabela"]/option[1]'
                ).is_selected():
                    time.sleep(0.5)

                for i, item in enumerate(
                        driver.find_element_by_id('simulacao_tipoTabela').
                        find_elements_by_tag_name('option')):
                    # print(i, item.get_attribute("selected"))
                    if item.get_attribute("selected"):
                        tipo_tabela_option = i + 1

                if tipo_tabela_option == 5:  # ADESAO

                    # Selecionando a Administradora
                    print("Seleciona a administradora!")
                    while driver.find_element_by_xpath(
                            '//*[@id="simulacao_adesao_administradora"]/option[1]'
                    ).is_selected():
                        time.sleep(0.5)

                    for i, item in enumerate(
                            driver.find_element_by_id(
                                'simulacao_adesao_administradora').
                            find_elements_by_tag_name('option')):
                        if item.get_attribute("selected"):
                            nome_administradora = item.text
                            administradora_option = i + 1

                    sql = f"select * from tbl_administradora where titulo like '%{nome_administradora}%';"
                    conn = conexao.myConexao()
                    cursor = conn.cursor()
                    res = cursor.execute(sql)
                    if res > 0:
                        # print(cursor.fetchall()[0][0])
                        id_administradora = cursor.fetchall()[0][0]
                        print(id_administradora)

                    # Selecionando a Operadora
                    print("Seleciona a Operadora!")
                    while driver.find_element_by_xpath(
                            '//*[@id="simulacao_adesao_opes"]/option[1]'
                    ).is_selected():
                        time.sleep(0.5)

                    for i, item in enumerate(
                            driver.find_element_by_id('simulacao_adesao_opes').
                            find_elements_by_tag_name('option')):
                        if item.get_attribute("selected"):
                            operadora_option = i + 1

                    # Selecionando a Entidade
                    print("Seleciona a Entidade!")

                    while driver.find_element_by_xpath(
                            '//*[@id="simulacao_adesao_entidade"]/option[1]'
                    ).is_selected():
                        time.sleep(0.5)

                    driver.implicitly_wait(15)
                    for i, item in enumerate(
                            driver.find_element_by_id(
                                'simulacao_adesao_entidade').
                            find_elements_by_tag_name('option')):
                        if item.get_attribute("selected"):
                            entidade_option = i + 1

                    print(tipo_tabela_option, administradora_option,
                          operadora_option, entidade_option)
                    selecaoAdesao.obterDados(driver, tipo_tabela_option,
                                             administradora_option,
                                             operadora_option, entidade_option)

                elif tipo_tabela_option == 4:
                    simulacaoTradicional.obterDados(driver, tipo_tabela_option)

            else:

                tipo_tabela_option = 4

            simulacaoTradicional.obterDados(driver, tipo_tabela_option)