Esempio n. 1
0
def es_maximo_turnos_permitidos(fecha_inicio, fecha_termino, unidad_operativa):
    MAXIMO_TURNOS_NOMBRADA = 2

    turnos = Turn.objects.filter(unidad_operativa=unidad_operativa)
    if get_cantidad_turnos(fecha_inicio, fecha_termino, turnos) > MAXIMO_TURNOS_NOMBRADA:
        return True

    return False
Esempio n. 2
0
def get_trabajadores_excluidos_dict(params):
    trabajadores_excluidos = {}

    MAXIMO_TURNOS_MES = 26
    MAXIMO_TURNOS_NOMBRADA = 2

    # Calculando la cantidad de turnos que tiene la nombrada solicitada
    cantidad_turnos_nombrada_solicitada = get_cantidad_turnos(params.inicio_nombrada,
                                                              params.termino_normbrada,
                                                              params.turnos)

    for trabajador_id, lista_fechas_trabajadores in params.fechas_trabajadores_dict.items():
        for trabajador_fecha in lista_fechas_trabajadores:
            if get_minutos_en_intervalos(trabajador_fecha.inicio,
                                         trabajador_fecha.termino,
                                         params.inicio,
                                         params.termino) > 0:

                trabajador_exluido = TrabajadorExcluido()
                trabajador_exluido.causa = 'Se encuentra asignado en nombrada : ' + trabajador_fecha.codigo_nombrada

                trabajadores_excluidos[trabajador_id] = trabajador_exluido
                break

    for trabajador_id, trabajador_tiempo in params.tiempos_trabajadores_dict.items():

        if trabajador_tiempo.cantidad_turnos_mes + cantidad_turnos_nombrada_solicitada > MAXIMO_TURNOS_MES:
            elapsed = abs(
                MAXIMO_TURNOS_MES - (
                    trabajador_tiempo.cantidad_turnos_mes + cantidad_turnos_nombrada_solicitada))

            trabajador_exluido = TrabajadorExcluido()
            trabajador_exluido.causa = 'Superaría en (' + str(
                elapsed) + ') al máximo de turnos permitidos(26)'

            trabajadores_excluidos[trabajador_id] = trabajador_exluido

    for trabajador_id, lista_fechas_trabajadores in params.fechas_trabajadores_dict.items():
        if trabajador_id in trabajadores_excluidos.keys():
            continue

        # Se agrega la nombrada solicitada a la lista de fechas del trabajados
        lista_fechas_trabajadores.append(
            (params.inicio, params.termino, 'Nueva nombrada'))

        intervalos_agrupados = get_lista_intervalos_agrupados(
            lista_fechas_trabajadores)

        for grupo in intervalos_agrupados:
            cantidad_turnos_grupo = get_cantidad_turnos(grupo.inicio,
                                                        grupo.termino,
                                                        params.turnos)

            if cantidad_turnos_grupo > MAXIMO_TURNOS_NOMBRADA:
                trabajador_exluido = TrabajadorExcluido()
                trabajador_exluido.causa = 'Generaria turnos consecutivos en : ' + grupo.descripcion

                trabajadores_excluidos[trabajador_id] = trabajador_exluido
                break

    return trabajadores_excluidos