Pular para conteúdo

Converte horas semanais

converte_horas_semanais(lista_horas, formato)

Recebe um Dicionario de horas e calcula a quantidade para fechar a semana

Parameters:

Name Type Description Default
lista_horas dict[str, list[str]]

Dicionario contendo o lançamento das horas

required
formato int

Inteiro que define qual formato de saida dos horarios

required

Examples:

>>> converte_horas_semanais([['nm', '09.00']], 1)
{'total_horas_da_semana': '09:00', 'total_horas_extra': '00:00', 'total_horas_faltantes': '35:00'}
>>> converte_horas_semanais([['nm', '09.00'],['nm', '09.00']], 1)
{'total_horas_da_semana': '18:00', 'total_horas_extra': '00:00', 'total_horas_faltantes': '26:00'}
>>> converte_horas_semanais([['nm', '09.00'],['ov', '02.00']], 1)
{'total_horas_da_semana': '09:00', 'total_horas_extra': '02:00', 'total_horas_faltantes': '35:00'}
>>> converte_horas_semanais([['nm', '09.00']], 2)
{'total_horas_da_semana': '09.00', 'total_horas_extra': '00.00', 'total_horas_faltantes': '35.00'}
>>> converte_horas_semanais([['nm', '09.00'],['ov', '02.00']], 2)
{'total_horas_da_semana': '09.00', 'total_horas_extra': '02.00', 'total_horas_faltantes': '35.00'}

Returns:

Type Description
dict[str, list[str]]

Um Dicionario contendo a totalização das horas

Raises:

Type Description
ValueError

Caso a hora nao seja uma hora válida

KeyError

Não foi encontrado o tipo de lançamento ou formato informado

Source code in conversor_horas_trabalho/converte_horas_semanais.py
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
def converte_horas_semanais(
    lista_horas: dict[str, list[str]], formato: int
) -> dict[str, list[str]]:
    """
    Recebe um Dicionario de horas e calcula a quantidade para fechar a semana

    Args:
        lista_horas: Dicionario contendo o lançamento das horas
        formato: Inteiro que define qual formato de saida dos horarios

    Examples:
        >>> converte_horas_semanais([['nm', '09.00']], 1)
        {'total_horas_da_semana': '09:00', 'total_horas_extra': '00:00', 'total_horas_faltantes': '35:00'}

        >>> converte_horas_semanais([['nm', '09.00'],['nm', '09.00']], 1)
        {'total_horas_da_semana': '18:00', 'total_horas_extra': '00:00', 'total_horas_faltantes': '26:00'}

        >>> converte_horas_semanais([['nm', '09.00'],['ov', '02.00']], 1)
        {'total_horas_da_semana': '09:00', 'total_horas_extra': '02:00', 'total_horas_faltantes': '35:00'}

        >>> converte_horas_semanais([['nm', '09.00']], 2)
        {'total_horas_da_semana': '09.00', 'total_horas_extra': '00.00', 'total_horas_faltantes': '35.00'}

        >>> converte_horas_semanais([['nm', '09.00'],['ov', '02.00']], 2)
        {'total_horas_da_semana': '09.00', 'total_horas_extra': '02.00', 'total_horas_faltantes': '35.00'}

    Returns:
        Um Dicionario contendo a totalização das horas

    Raises:
        ValueError: Caso a hora nao seja uma hora válida
        KeyError: Não foi encontrado o tipo de lançamento ou formato informado

    """
    retorna = {}
    qnt_tot_hr_seg = 0
    qnt_tot_hr_ext_seg = 0
    qnt_tot_hr_falt_diff_seg = 0
    for lancamento in lista_horas:
        tipo_lancamento = lancamento[0]
        try:
            qnt_hr_result = converte_horas(lancamento[1])
            hr, minutos = map(int, qnt_hr_result['hora'][0].split(':'))
        except ValueError:
            raise ValueError(
                f'Não foi possivel extrair a hora corretamente {lancamento[1]}'
            )
        qnt_horas_seg = hr * 3600 + minutos * 60

        if tipo_lancamento == 'nm':
            qnt_tot_hr_seg = qnt_tot_hr_seg + qnt_horas_seg
        elif tipo_lancamento == 'ov':
            qnt_tot_hr_ext_seg = qnt_tot_hr_ext_seg + qnt_horas_seg
        else:
            raise KeyError(
                f'Não existe esse tipo de lancamento {tipo_lancamento}'
            )
    if qnt_tot_hr_seg > 158400:
        total_horas_faltantes = '00:00'
    else:
        qnt_tot_hr_falt_diff_seg = 158400 - qnt_tot_hr_seg
        total_horas_faltantes = _segundos_para_hh_mm(qnt_tot_hr_falt_diff_seg)
    total_horas_da_semana = _segundos_para_hh_mm(qnt_tot_hr_seg)
    total_horas_extra = _segundos_para_hh_mm(qnt_tot_hr_ext_seg)
    if formato == 2:
        total_horas_da_semana = converte_horas(total_horas_da_semana)['hora'][
            0
        ]
        total_horas_extra = converte_horas(total_horas_extra)['hora'][0]
        total_horas_faltantes = converte_horas(total_horas_faltantes)['hora'][
            0
        ]
    elif formato == 1:
        pass
    else:
        raise KeyError(f'Não existe esse tipo de formato {formato}')

    retorna = {
        'total_horas_da_semana': total_horas_da_semana,
        'total_horas_extra': total_horas_extra,
        'total_horas_faltantes': total_horas_faltantes,
    }

    return retorna