Esempio n. 1
0
def create_csv_cuotas_cobradas_file(
        sql_select_csv_fn,
        output_csv_fn,
        columns_name_to_filter,
        db_engine,
        active_wallet_result,
        cartera_activa_table_name="cartera_activa"):
    msg = f"Reading {sql_select_csv_fn} ..."
    try:
        logger.info(msg)
        sql_file_csv = open(
            os.path.join(settings.MYSQL_SQL_DIR, sql_select_csv_fn))

        logger.info(f"{msg} Done!")
        d = date.today()
        offset = BMonthEnd()
        date2 = str(offset.rollforward(d) - BDay(2))[:-9]
        date1 = str(offset.rollback(d) - BDay(1))[:-9]

        data = sql_file_csv.read().replace('$1', date1).replace('$2', date2)

        msg = f"Executing pandas.read_sql for {sql_select_csv_fn} ..."
        logger.info(msg)
        result = pandas.read_sql(sql=text(
            data.format(cartera_activa_table_name)),
                                 con=db_engine)
        logger.info(f"{msg} Done!")

        pattern = re.compile('[^a-zA-Z0-9\-._: \.\(\)\/]')
        msg = f"Removing characters '{pattern}' by '_' for {sql_select_csv_fn} data ..."
        logger.info(msg)
        for columns_name in columns_name_to_filter:
            result[columns_name] = result[columns_name].str.replace(
                pattern, '_')
        logger.info(f"{msg} Done!")
        fn = f'{output_csv_fn}_{datetime.datetime.now().strftime("%m-%d-%y-%H%M%S")}.zip'
        msg = f"Writing csv file {fn}... "
        logger.info(msg)
        result_csv = result.to_csv(header=False,
                                   decimal=',',
                                   index=False,
                                   encoding='utf-8-sig')
        zipbuff = io.BytesIO()
        with zipfile.ZipFile(zipbuff, "a", zipfile.ZIP_DEFLATED,
                             False) as zip_file:
            zip_file.writestr(f"results_{output_csv_fn}.csv",
                              result_csv.encode('utf-8-sig'))
        result = None
        result_csv = None
        gc.collect()
        active_wallet_result.save(fn, ContentFile(zipbuff.getvalue()))
        logger.info(f"{msg} Done!")
    except Exception as error:
        msg = f"{msg} Fail!: {error}"
        raise Exception(msg)
Esempio n. 2
0
def find_last_BD_MonthEnd(date):

    offset = BMonthEnd()

    return offset.rollback(date)