Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def carga_secciones(request):
- log = "[Error] %s En la linea: %s \n"
- log_secciones = open("log_secciones.txt","w")
- PROA = request.FILES['proa']
- fs_PROA = FileSystemStorage()
- filename_PROA = fs_PROA.save(PROA.name.lower(), PROA)
- PROA_url = fs_PROA.url(filename_PROA)
- PROA_url = PROA_url[1:].capitalize()
- wb = load_workbook(PROA_url)
- sheets_PROA = []
- for sheet in wb.get_sheet_names():
- sheet = sheet.replace(u'\xa0', u'')
- sheet = str(sheet)
- sheets_PROA.append(wb[sheet])
- for sheet in sheets_PROA:
- #carreer = obtenerCarrera(sheet.title)[0]
- carreer = get_object_or_404(Carreer, diurno="UNAB11500")
- i = 2
- while sheet["A"+str(i)].value != None: #Este recorre el excel
- log_secciones.write("[I]"+str(i)+"\n")
- period = int(sheet["D"+str(i)].value)
- try:
- try:
- nrc = int(sheet["I"+str(i)].value) #Empiezo obteniendo nrc
- class_type = sheet["S"+str(i)].value #con esto reviso que tipo de ramo es, o teoria o complementario (tutoring)
- if sheet.title == "UNAB11500" or sheet.title == "UNAB21500" or sheet.title == "UNAB21503" or sheet.title == "UNAB21501": # Como informatica funciona distinto que otras carreras aca distingo una de otra
- flag = class_type == "TEORICO - PRACTICO" and int(str(sheet["R"+str(i)].value).split("/")[0]) > 2
- log_secciones.write("[CLASS TYPE] %s \n" % (unidecode(class_type)))
- if unidecode(class_type) == "TEORIA" or unidecode(class_type) == "PRÁCTICA" or flag:
- log_secciones.write("[NRC] %d Catedra %d\n" % (nrc,period))
- lecture = get_object_or_404(Course, nrc=nrc,period=period)
- else:
- log_secciones.write("[NRC] %d Tutoria %s\n" % (nrc,period))
- tutoring = get_object_or_404(Tutoring, nrc=nrc,period=period)
- else: #Para industria, falta ver para las otras carreras
- if unidecode(class_type) == "LABORATORIO" or unidecode(class_type) == "AYUDANTIA":
- tutoring = get_object_or_404(Tutoring, nrc=nrc,period=period)
- else:
- lecture = get_object_or_404(Course, nrc=nrc,period=period)
- except Exception,e:
- exc_type, exc_obj, exc_tb = sys.exc_info()
- log_secciones.write(log % (e,exc_tb.tb_lineno ))
- print "Error 1: ",e," En la linea: ", exc_tb.tb_lineno
- if sheet.title == "UNAB21503" or sheet.title == "UNAB21501":
- nom_shift = "Advance"
- else:
- nom_shift = sheet["H"+str(i)].value.capitalize() #Se genera el ciclo en la base de datos si no existe
- try:
- shift = get_object_or_404(Shift, name=nom_shift)
- except Exception,e:
- print e
- shift = Shift.objects.create(name=nom_shift)
- shift.save()
- code = sheet["G"+str(i)].value
- vacants = int(sheet["V"+str(i)].value)
- rut_profesor = sheet["O"+str(i)].value #En la casilla de rut no siempre hay solo 1, en los casos que hay mas solo se toma el primero.
- if "/" in str(rut_profesor):
- rut_profesor = str(rut_profesor).split("/")[0].strip(" ")
- dv_profesor = str(rut_profesor)[-1]
- rut_profesor = str(rut_profesor)[:-1]
- nom_profesor = sheet["P"+str(i)].value
- try: #Si el profe no existe se crea
- log_secciones.write("[RUT DEL PROFESOR]"+str(rut_profesor)+"\n")
- try:
- teacher = get_object_or_404(UserProfile, rut=int(rut_profesor))
- except:
- teachers = get_list_or_404(UserProfile, rut=int(rut_profesor))
- for teacher in teachers:
- if teacher.user_type== "DO":
- teacher=teacher
- except Exception,e :
- exc_type, exc_obj, exc_tb = sys.exc_info()
- log_secciones.write(log % (e,exc_tb.tb_lineno ))
- print "Error 2: ",e," En la linea: ", exc_tb.tb_lineno
- nom_profesor = nom_profesor.split("/")[0].split(" ")
- for nom in nom_profesor:
- nom = unidecode(nom)
- if nom == "":
- nom_profesor.pop(nom_profesor.index(nom))
- ii=2
- username = nom_profesor[0][0:i].lower() + "." + nom_profesor[-2].lower() + "." + nom_profesor[-1].lower()
- while User.objects.filter(username=username).exists():
- ii+=1
- username = nom_profesor[0][0:i].lower() + "." + nom_profesor[-2].lower() + "." + nom_profesor[-1].lower()
- user = User.objects.create_user(username=username,password="UNAB2020")
- user.save()
- user.first_name = nom_profesor[0].capitalize()
- user.last_name = nom_profesor[-2].capitalize()+" "+nom_profesor[-1].capitalize()
- user.save()
- teacher = UserProfile.objects.create(user=user,
- rut=rut_profesor,
- dv=dv_profesor,
- user_type="DO")
- teacher.save()
- code_asignatura = sheet["E"+str(i)].value+str(sheet["F"+str(i)].value)
- try:#si la asignatura no existe se crea
- subject = get_object_or_404(Subject, code=str(code_asignatura))
- if carreer not in subject.carreer.all(): #Agrega las carreras que tienen este ramo
- subject.carreer.add(get_object_or_404(Carreer, diurno="UNAB11500"))
- subject.save()
- except Exception,e:
- exc_type, exc_obj, exc_tb = sys.exc_info()
- log_secciones.write(log % (e,exc_tb.tb_lineno ))
- subject_name = sheet["Q"+str(i)].value
- subject_name = unidecode(subject_name)
- subject = Subject.objects.create(name=subject_name,
- code=code_asignatura,)
- subject.save()
- subject.carreer.add(get_object_or_404(Carreer, diurno="UNAB11500"))
- subject.save()
- log_secciones.write("Subject creado %s %s\n" %(subject_name,code_asignatura))
- nrc = sheet["I"+str(i)].value
- class_type = sheet["S"+str(i)].value
- schedules = sheet["U"+str(i)].value
- carreers = sheet["AA"+str(i)].value
- carreers = carreers.split("/")
- carreers_imparted = [] #Estas son las carreras que pueden inscribirse en esta seccion (diferente a las carreras que pueden tomar el ramo)
- for carreer in carreers:
- carreers_imparted.append(get_object_or_404(Carreer, diurno="UNAB11500"))
- if schedules != None:
- #GENERA LOS HORARIOS CON SU SALA
- edificios = sheet["X"+str(i)].value
- salas = sheet["Y"+str(i)].value
- if edificios != None:
- edificios = edificios.split("/")
- if salas != None:
- salas = salas.split("/")
- schedules = unidecode(schedules)
- schedules = schedules.split("/")
- schedules = map(str,schedules)
- schedules_final = []
- for horario in schedules:
- n_horario = str(horario.replace(" ","").replace(".",""))
- schedules_final.append(str(n_horario.split("-")[0]))
- horarios = ""
- a=0
- for horario in schedules_final:
- dia = horario[:2]
- hora = horario[2:]
- if hora in module_dict:
- hora = module_dict[hora]
- dia = day_dict[dia]
- if edificios == None and salas == None:
- horario_final = dia+hora+";"+str(edificios)+"-"+str(salas)
- elif edificios == None:
- horario_final = dia+hora+";"+str(edificios)+"-"+salas[a].replace(" ","")
- elif salas == None:
- horario_final = dia+hora+";"+edificios[a].replace(" ","")+"-"+str(salas)
- else:
- horario_final = dia+hora+";"+edificios[a].replace(" ","")+"-"+salas[a].replace(" ","")
- if horarios == "":
- horarios += horario_final
- else:
- horarios += "/"+horario_final
- else:
- pass
- a+=1
- else:
- horarios = ""
- n_section = Section.objects.create(shift=shift, code=code)
- n_section.save()
- if sheet.title == "UNAB11500" or sheet.title == "UNAB21500" or sheet.title == "UNAB21503" or sheet.title == "UNAB21503": #ACA SE CREA EL CURSO CON TODOS LOS DATOS QUE SE RECOLECTARON ANTES (PARA INFORMATICA PRIMERO)
- log_secciones.write("PROCESO DE CREACION\n")
- flag = class_type == "TEORICO - PRACTICO" and int(str(sheet["R"+str(i)].value).split("/")[0]) > 2
- if class_type == "TEORIA" or class_type == "PRÁCTICA" or flag:
- log_secciones.write("INTENTANDO DE CREAR UNA CATEDRA\n")
- n_course = Course.objects.create(section=n_section,
- class_schedule=horarios,
- teacher=teacher,
- subject=subject,
- period=period,
- nrc=int(nrc),
- vacants=vacants)
- n_course.save()
- log_secciones.write("[NRC] %d Catedra %d Creado\n" % (nrc,period))
- for carreer in carreers_imparted:
- n_course.carreers_imparted.add(carreer)
- n_course.save()
- else:
- log_secciones.write("INTENTADO DE CREAR UNA TUTORIA\n")
- related = sheet["K"+str(i)].value
- if related != None:
- related = related.strip("/")
- else:
- pass
- n_course = Tutoring.objects.create(section=n_section,
- class_schedule=horarios,
- period=period,
- related=related,
- teacher=teacher,
- subject=subject,
- nrc=int(nrc),
- vacants=vacants)
- n_course.save()
- log_secciones.write("[NRC] %d Tutoria %d Creado\n" % (nrc,period))
- for carreer in carreers_imparted:
- n_course.carreers_imparted.add(carreer)
- n_course.save()
- else: #Industria
- if class_type == "LABORATORIO" or class_type == "AYUDANTIA":
- related = sheet["K"+str(i)].value
- if related != None:
- related = related.strip("/")
- else:
- pass
- n_course = Tutoring.objects.create(section=n_section,
- period=period,
- class_schedule=horarios,
- related=related,
- teacher=teacher,
- subject=subject,
- nrc=int(nrc),
- vacants=vacants)
- n_course.save()
- for carreer in carreers_imparted:
- n_course.carreers_imparted.add(carreer)
- n_course.save()
- else:
- n_course = Course.objects.create(section=n_section,
- class_schedule=horarios,
- teacher=teacher,
- subject=subject,
- period=period,
- nrc=int(nrc),
- vacants=vacants)
- n_course.save()
- for carreer in carreers_imparted:
- n_course.carreers_imparted.add(carreer)
- n_course.save()
- i+=1
- except Exception,e :
- exc_type, exc_obj, exc_tb = sys.exc_info()
- log_secciones.write(log % (e,exc_tb.tb_lineno ))
- print "Error 4: ",e," En la linea: ", exc_tb.tb_lineno
- i+=1
- log_secciones.close()
- os.remove(PROA_url)
- # template_name = "upload_data.html"
- # data = {}
- # if Course.objects.all().exists() and Tutoring.objects.all().exists():
- # data["Course_uploaded"] = True
- # else:
- # data["Course_uploaded"] = False
- # if UserProfile.objects.filter(user_type="ES").exists():
- # data["Students_uploaded"] = True
- # else:
- # data["Students_uploaded"] = False
- # return render(request,template_name,data
- return "exito"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement