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}")
Пример #3
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 pegarDados(driver, cursor, id_sindicato, data_reajuste):
    # Ativar ou dasativar a persistencia de dados

    salvar = conexao.inserirRegistro()
    deletar_duplicados = conexao.deletarRegistroDuplicado()

    global nome_administradora
    global planos_sem_cadastros
    global hospitalar
    global id_coparticipacao
    global id_operadora
    global min_vidas
    global max_vidas
    global ultimo
    id_area = 0
    planos_atualizados = []

    time.sleep(4)

    print("Obtendo dados:")
    try:
        WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'bgGray')))
    finally:
        pass

    soup = BeautifulSoup(driver.page_source, 'html.parser')

    tables = soup.find_all('table', attrs={"static small ta-c"})

    tipo_contratacao_lead = driver.find_elements_by_class_name(
        'titulo')[0].text

    if re.search('Adesão', tipo_contratacao_lead):
        id_tipo_contratacao_lead = 0

    operadora_tipocoparticipacao = str(
        driver.find_element_by_xpath(
            '//*[@id="geral-content"]/section/div[2]/div[2]/div[1]/p').text)

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

    print("Pegando precos!")
    if ultimo:
        quant = 1
    else:
        quant = 2
    for num_tables in range(quant):
        info_sindicato = ""
        sindicato_name = ""
        if num_tables == 0:
            titulo = str(
                driver.find_element_by_xpath(
                    '//*[@id="geral-content"]/section/div[2]/div[2]/div[2]/b').
                text)

            info_sindicato = driver.find_element_by_xpath(
                '//*[@id="geral-content"]/section/div[2]/div[2]/div[3]').text
            sindicato_name = driver.find_element_by_xpath(
                '//*[@id="geral-content"]/section/div[2]/div[2]/div[3]/b').text

        if num_tables == 1:
            titulo = str(
                driver.find_element_by_xpath(
                    '//*[@id="geral-content"]/section/div[2]/div[2]/div[5]/b').
                text)
            info_sindicato = driver.find_element_by_xpath(
                '//*[@id="geral-content"]/section/div[2]/div[2]/div[6]').text
            sindicato_name = driver.find_element_by_xpath(
                '//*[@id="geral-content"]/section/div[2]/div[2]/div[6]/b').text

        print(
            f"{operadora_tipocoparticipacao}\n \n{titulo}\n{info_sindicato}\n")

        titulo = titulo.split("-")
        if len(titulo) > 1:
            area = titulo[1].strip()
            numero_vidas = titulo[2].strip()
        else:
            area = 'SP CAPITAL'
            numero_vidas = 'APENAS TITULAR'

        tipo_tabela = titulo[0].strip()

        sql = f"select * from tbl_tipo_tabela, tbl_sindicato where nome like '%{tipo_tabela}%' and titulo like '%{str(sindicato_name).strip()}%';"
        res = cursor.execute(sql)

        if res > 0:
            select = cursor.fetchall()[0]
            print(f"Sindicato do banco de dados: {select[1:-1]}")
            id_tipo_tabela = select[0]
            id_sindicato = select[2]

            if numero_vidas == 'APENAS TITULAR':
                min_vidas = 0
                # Se a Operadora for AMIL, alterar o numero maximo de vidas
                if id_operadora == 2:
                    max_vidas = 0
                else:
                    max_vidas = 1
            elif numero_vidas == 'TITULAR + DEPENDENTES':
                min_vidas = 2
                max_vidas = 0

            sql = f"select * from tbl_area, tbl_administradora where area like '%{area}%' and  titulo like 'QUALICORP';"
            print(sql)
            res = cursor.execute(sql)
            if res > 0:
                select = cursor.fetchall()[0]
                id_area = select[0]
                id_administradora = select[3]

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

                dados = []
                # dados =      "plano", "preco 0 a 18", ""
                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])
                for dado in dados:
                    # print(dado)
                    plano_modalidade = str(dado[0]).split("(")

                    id_modalidade = plano_modalidade[1].strip().replace(
                        ")", "")
                    if id_modalidade == "A":
                        id_modalidade = 2
                    if id_modalidade == "E":
                        id_modalidade = 1

                    plano = plano_modalidade[0].strip()

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

                    # variaçoes dos nomes de planos da AMIL FACIL
                    if id_operadora == 8:
                        min_vidas = 0
                        max_vidas = 0

                    # variaçoes dos nomes de planos da BRADESCO
                    if id_operadora == 3:
                        if plano == 'SAÚDE EFETIVO IV':
                            plano = "Efetivo III"
                        elif plano == "NACIONAL FLEX E CA":
                            plano = "FLEX"
                        elif plano == "NACIONAL FLEX Q CA":
                            plano = "FLEX"
                        elif plano == "TOP NACIONAL E CA":
                            plano = "Top Nacional E"
                        elif plano == "TOP NACIONAL Q CA":
                            plano = "Top Nacional Q"
                        elif plano == "TOP NPLUS3 Q CA":
                            plano = "NP03"
                        elif plano == "TOP NPLUS4 Q CA":
                            plano = "NP04"
                        elif plano == "TOP NPLUS6 Q CA":
                            plano = "NP06"

                        min_vidas = 0
                        max_vidas = 0

                    sql = f"select * from tbl_planos_sindicato where titulo like '%{plano}%';"
                    # print(sql)
                    res = cursor.execute(sql)
                    valores = []
                    # print(res)

                    if res == 1:
                        result_select = cursor.fetchall()[0]
                        print(result_select)
                        id_plano = result_select[0]
                        id_categoria_plano = result_select[4]
                        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
                                id_coparticipacao,  # id_coparticipacao
                                id_modalidade,  # id_modalidade,
                                id_operadora,  # id_operadora
                                2,  # 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
                                str(1),  # qtd_titulares
                                id_sindicato,  # id_sindicato
                                hospitalar,  # hospitalar
                                min_vidas,  # min_vidas
                                max_vidas,  # max_vidas
                                2,  # 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_coparticipacao = {id_coparticipacao} and qtd_titulares = 1 " \
                                    f"and min_vidas = {min_vidas} and max_vidas = {max_vidas} and id_sindicato = {id_sindicato} 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]
                                ultimo_reajuste = select[25]

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

                                # if ultimo_reajuste is None:
                                #     update = f"UPDATE `tbl_preco_faixa_etaria` SET `ultimo_reajuste`='{data_reajuste}' WHERE `id`='{id}';"
                                #     print(update)
                                #     cursor.execute(update)

                                # print(type(preco0_18), type(valores[0]))
                                # print(preco0_18, valores[0])
                                if not preco0_18 == valores[
                                        0]:  # 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"id_tipo_tabela = {id_tipo_tabela}, " \
                                             f"`ultimo_reajuste`='{data_reajuste}' " \
                                             f"WHERE `id`='{id}';"
                                    print(update)

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

                                    print(res)
                                    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)

                                        # 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 ) " \
                                        #          f"values ({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 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")
                                if deletar_duplicados:
                                    id_item_duplicado = cursor.fetchall()[0][0]
                                    sql = f"delete from tbl_preco_faixa_etaria where id = {id_item_duplicado};"
                                    print(sql)
                                    res = cursor.execute(sql)
                                    if res > 0:
                                        print("Item deletado com sucesso")

                        # print(values ,",")

                    elif res > 1:
                        print(
                            f"Mais de um plano encontrado: {cursor.fetchall()}"
                        )

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

                        if ref_plano:
                            planos_sem_cadastros.append(plano)

                print(f"Total de preços de planos atulizados: {inseridos}")

        elif res == 0:
            print("Nao achou o sindicato")

    print(planos_sem_cadastros)
Пример #5
0
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)

    cursor.close()
    conn.commit()
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}")