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
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