prefeiturasp/SME-PratoAberto-Editor

View on GitHub
utils.py

Summary

Maintainability
D
3 days
Test Coverage
import datetime

import unidecode


def datetime_to_brstring(dt):
    try:
        return dt.strftime('%d/%m/%Y')
    except AttributeError as e:
        return ''


def convert_datetime_format(dt_str, dt_str_format, to_format):
    try:
        return datetime.datetime.strptime(dt_str, dt_str_format).strftime(to_format)
    except AttributeError as e:
        return ''


def yyyymmdd_to_date_time(dt_str):
    try:
        return datetime.datetime.strptime(dt_str, '%Y%m%d')
    except ValueError as e:
        return ''


def sort_array_by_datetime(unsorted_array, reverse=False):
    sorted_array = sorted(
        unsorted_array,
        key=lambda x: x[4], reverse=reverse
    )
    return sorted_array


def sort_array_date_br(data_array, opt=1):
    """
    recebe um array, transforma a coluna 4 e 5 para datetime
    ordena
    passa as colunas pra formato string br

    :param data_array: array
    :param index: int
    :return: array
        """
    # passa para datetime
    for i in range(len(data_array)):
        if opt != 1:
            data_array[i][9] = yyyymmdd_to_date_time(data_array[i][9])

        data_array[i][4] = yyyymmdd_to_date_time(data_array[i][4])
        data_array[i][5] = yyyymmdd_to_date_time(data_array[i][5])

    # ordena por datetime
    data_array = sort_array_by_datetime(data_array, reverse=True)

    # passa para data br str
    for i in range(len(data_array)):
        if opt != 1:
            data_array[i][9] = datetime_to_brstring(data_array[i][9])

        data_array[i][4] = datetime_to_brstring(data_array[i][4])
        data_array[i][5] = datetime_to_brstring(data_array[i][5])
    return data_array


def sort_array_by_date_and_index(data_array, index=4):
    """
    recebe um array, transforma uma coluna especifica pra datetime
    ordena
    passa o a coluna pra formato string br
    :param data_array: array
    :param index: int
    :return: aray
    """
    # passa para datetime
    for i in range(len(data_array)):
        data_array[i][index] = yyyymmdd_to_date_time(data_array[i][index])

    # ordena por datetime
    data_array = sort_array_by_datetime(data_array, reverse=True)

    # passa para data br str
    for i in range(len(data_array)):
        data_array[i][index] = datetime_to_brstring(data_array[i][index])
    return data_array


def format_datetime_array(array):
    array_aux = []
    for i in array:
        date_initial = i.split(' - ')[0]
        date_end = i.split(' - ')[1]
        date_initial = date_initial[6:8] + '/' + date_initial[4:6] + '/' + date_initial[0:4]
        date_end = date_end[6:8] + '/' + date_end[4:6] + '/' + date_end[0:4]
        array_aux.append(date_initial + ' - ' + date_end)
    return array_aux


def remove_duplicates_array(array):
    """Este método está seendo usado no lugar de set porque o set tira a ordem"""
    retval = []
    for i in array:
        if i not in retval:
            retval.append(i)
    return retval


def fix_date_mapa_final(array):
    retval = []
    for i in array:
        if i not in retval:
            data_ini_br = yyyymmdd_to_date_time(i['data_inicial']).strftime('%d/%m/%Y')
            data_fim_br = yyyymmdd_to_date_time(i['data_final']).strftime('%d/%m/%Y')
            i['data_inicial'] = data_ini_br
            i['data_final'] = data_fim_br
            retval.append(i)
    return retval


def generate_csv_str(cardapio_aux):
    header = [['ATENDIMENTO', 'UNIDADE', 'AGRUPAMENTO', 'IDADE', 'DATA', 'STATUS', 'REFEICÃO', 'CARDÁPIO']]
    cardapio_aux = header + cardapio_aux
    csvlist = '\n'.join(['"' + str('";"'.join(row)) + '"' for row in cardapio_aux])
    return unidecode.unidecode(csvlist)


def date_to_str(date):
    return datetime.datetime.strftime(date, '%d/%m/%Y')


def monday_to_sunday(date):
    return date + datetime.timedelta(days=6)


def last_monday(date):
    while date.weekday() != 0:
        date -= datetime.timedelta(days=1)
    return date


def generate_ranges(days):
    dates = []
    last_date = datetime.datetime.utcnow()
    current_day = datetime.datetime.utcnow()
    if days == 'all':
        dates = ['18/12/2017 - 22/12/2017']
        last_date = datetime.datetime.utcnow()
        current_day = last_monday(datetime.datetime(2017, 12, 23))
    elif int(days) > 0:
        current_day = last_monday(current_day)
        last_date = datetime.datetime.utcnow() + datetime.timedelta(days=int(days))
    else:
        current_day = last_monday(current_day + datetime.timedelta(days=int(days)))
    while current_day < last_date:
        dates.append(date_to_str(current_day) + ' - ' + date_to_str(monday_to_sunday(current_day)))
        current_day += datetime.timedelta(days=7)
    return dates