R/import_C3.R

Defines functions import_c3

Documented in import_c3

#' Importar arquivo de PNs da gestão de crédito
#'
#' Importa o arquivo C3 para o R ou para o MySQL.
#'
#' @export
#'
#' @param caminho String. O caminho do arquivo a ser importado, incluindo a
#'   extensao (.txt).
#' @param mysql Logical. Se TRUE, entao o arquivo sera importado para o MySQL.
#' @param schema String. Se MySQL = TRUE, o nome do schema que conterá a tabela
#'   MG5 no MySQL. O schema deve existir no MySQL antes de executar a funcao.
#' @param tabela String. Se MySQL = TRUE, o nome da tabela a ser criada no
#'   servidor que contera os dados importados.
#'
#' @details Se for importar apenas para o R, lembre-se de nomear um objeto para
#'   o resultado da funcao. Caso for importar para o MySQL, nao é necessário
#'   criar um objeto. Note que a tabela será sobrescrita se já existir.
#'
#' @examples
#' \dontrun{
#' # para importar para o R:
#' data <- import_c3
#' 3("C:\\Arquivos\\C3\\202009.txt")
#'
#' # para importar para o MySQL:
#' import_c3("C:\\Arquivos\\C3\\202009.txt", MySQL = TRUE, tabela = "t202009")
#' }
#'
import_c3 <- function(caminho, mysql = FALSE, schema = "c3", tabela) {

    # evaluate args
    if (mysql == TRUE && is.null(tabela)) {
        stop("tabela deve ser informada")
    }

    # conexao com MySQL
    if (mysql == TRUE) {
        tryCatch({
                con <- DBI::dbConnect(
                    RMySQL::MySQL(),
                    host = "localhost",
                    db = schema,
                    user = "root",
                    password = rstudioapi::askForPassword("Database password")
                )
            },
            error = function(cond) {
                message(cond)
                stop(
                    paste(
                        "Talvez voce nao tenha criado o schema",
                        schema,
                        "no MySQL?"
                    )
                )
            }
        )
    }

    # importar arquivo para o R
    data <- readr::read_csv2(
        caminho,
        col_names = c(
            "agencia", "tp_cli", "cpf_cnpj", "nome", "ano_pn",
            "numero_pn", "status", "valor_pn", "class_pn",
            "class_cliente", "class_garantia", "produto",
            "subproduto", "competencia",
            sapply(1:30, function(x) paste0("exc", x)),
            "proponente",
            unlist(lapply(1:20, function(x) {
                c(
                    paste0("alcada", x),
                    paste0("mat_alc", x),
                    paste0("data", x),
                    paste0("hora", x),
                    paste0("voto", x)
                )
            })),
            unlist(lapply(1:3, function(x) {
                c(
                    paste0("bem", x),
                    paste0("garantia", x),
                    paste0("per_garantia", x)
                )
            })),
            "taxa", "per_taxa", "prazo", "per_prazo", "indice",
            "desc_indice", "per_indice", "origem_pn", "desc_origem_pn",
            "tp_inclusao_pn", "desc_tp_inclusao_pn", "mat_angariador",
            "tp_tx_aceita"
        ),
        col_types = readr::cols(
            agencia = readr::col_character(),
            cpf_cnpj = readr::col_character(),
            ano_pn = readr::col_character(),
            numero_pn = readr::col_character(),
            produto = readr::col_character(),
            subproduto = readr::col_character(),
            valor_pn = readr::col_double()
        )
    )

    # criar tabela no MySQL

    if (mysql == TRUE) {
        DBI::dbSendQuery(con, paste("DROP TABLE IF EXISTS", tabela))

        DBI::dbWriteTable(con, DBI::SQL(tabela), data)

        DBI::dbSendQuery(con, paste("
    ALTER TABLE `", schema, "`.`", tabela, "`
    ADD INDEX idx_agencia (agencia(4)),
    ADD INDEX idx_produto (produto(4)),
    ADD INDEX idx_subproduto (subproduto(4)),
    ADD INDEX idx_tp_cli (tp_cli(1));
    "))

        # desconectando
        DBI::dbDisconnect(con)
    } else {
        data
    }
}
albersonmiranda/MySQLimport documentation built on Dec. 19, 2021, 12:24 a.m.