예제 #1
0
def get_balanco_mes(vinculo, mes, ano, detalhado=False):
    calendario = FeriadosRioGrandeDoNorte()
    num_dias_mes = calendar.monthrange(ano, mes)[1]

    data_inicio = datetime.date(ano, mes, 1)
    data_fim = datetime.date(ano, mes, num_dias_mes)

    num_dias_uteis_mes = calendario.count_working_days(data_inicio, data_fim)
    horas_trabalhar = num_dias_uteis_mes * (vinculo.carga_horaria_diaria or 0)
    horas_trabalhar = timedelta(hours=horas_trabalhar)

    frequencias = get_registros_bolsista(vinculo, data_inicio, data_fim)
    ausencias = get_ausencias_bolsista(vinculo, data_inicio, data_fim)

    horas_registradas, horas_contabilizadas = get_total_horas_registradas_contabilizadas(
        frequencias)
    horas_abonadas_periodo = get_horas_abonadas_periodo(
        ausencias, calendario, data_inicio, data_fim)

    saldo_mes = horas_trabalhar - horas_contabilizadas - horas_abonadas_periodo

    if detalhado:
        return {
            'saldo_mes': saldo_mes,
            'horas_trabalhar': horas_trabalhar,
            'horas_registradas': horas_registradas,
            'horas_contabilizadas': horas_contabilizadas,
            'horas_abonadas_periodo': horas_abonadas_periodo,
        }

    return saldo_mes
예제 #2
0
def get_relatorio_mes(vinculo, mes, ano):

    registros = []
    horas_trabalhadas_periodo = timedelta()

    calendario = FeriadosRioGrandeDoNorte()
    feriados = calendario.holidays(ano)

    numero_dias = calendar.monthrange(ano, mes)[1]
    data_inicio = datetime.date(ano, mes, 1)
    data_fim = datetime.date(ano, mes, numero_dias)

    frequencias = get_registros_bolsista(vinculo, data_inicio, data_fim)
    ausencias = get_ausencias_bolsista(vinculo, data_inicio, data_fim)

    if not frequencias and not ausencias:
        return None

    for dia in range(1, numero_dias + 1):
        dia = datetime.date(ano, mes, dia)
        relatorio_dia = {'dia': dia}

        feriado = [feriado for feriado in feriados if feriado[0] == dia]

        relatorio_dia['feriado'] = feriado[0] if feriado else False

        ausencia = ausencias.filter(inicio__lte=dia, termino__gte=dia)
        relatorio_dia['ausencia'] = ausencia if ausencia.exists() else False

        registros_dia = frequencias.filter(created_at__date=dia)
        relatorio_dia['registros'] = registros_dia
        horas_trabalhadas = get_total_horas_trabalhadas(registros_dia)
        relatorio_dia['horas_trabalhadas'] = horas_trabalhadas
        horas_trabalhadas_periodo += horas_trabalhadas

        relatorio_dia['is_util'] = not relatorio_dia['feriado'] \
                 and not relatorio_dia['ausencia'] \
                 and super(FeriadosRioGrandeDoNorte, calendario).is_working_day(dia)

        registros.append(relatorio_dia)

    dias_uteis = calendario.count_working_days(data_inicio, data_fim)

    return {
        'registros':
        registros,
        'dias_uteis':
        dias_uteis,
        'total_horas_trabalhar':
        timedelta(hours=vinculo.carga_horaria_diaria) * dias_uteis,
        'horas_trabalhadas_periodo':
        horas_trabalhadas_periodo,
        'horas_abonadas_periodo':
        get_horas_abonadas_periodo(ausencias, calendario, data_inicio,
                                   data_fim),
        'saldo_mes_anterior':
        get_balanco_mes_anterior(vinculo, mes, ano),
    }
예제 #3
0
    def horas_sugeridas(self):
        calendario = FeriadosRioGrandeDoNorte()
        numero_dias_uteis = calendario.count_working_days(
            self.inicio, self.termino)
        horas_sugeridas = self.vinculo.carga_horaria_diaria * numero_dias_uteis

        if not horas_sugeridas:
            return timedelta()

        horas_sugeridas = timedelta(hours=horas_sugeridas)
        from frequencia.relatorios.calculos import get_total_horas_registradas_contabilizadas
        registros = self.vinculo.registros.filter(
            created_at__date__gte=self.inicio,
            created_at__date__lte=self.termino)
        horas_registradas, horas_contabilizadas = get_total_horas_registradas_contabilizadas(
            registros)

        horas_sugeridas = horas_sugeridas - horas_registradas
        return horas_sugeridas if horas_sugeridas.days >= 0 else timedelta()
예제 #4
0
 def horas_sugeridas(self):
     calendario = FeriadosRioGrandeDoNorte()
     numero_dias_uteis = calendario.count_working_days(
         self.inicio, self.termino)
     horas_sugeridas = self.vinculo.carga_horaria_diaria * numero_dias_uteis
     return timedelta(hours=horas_sugeridas)