def encuesta_nuevo_padre(request): codigo = codigo_encuesta_session(request) if not codigo: return codigo_encuesta(request) survey = Survey.objects.get(id=6) category_items = list(survey.category_set.all()) if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): form.save() return redirect('encuesta_finalizada') else: print "error llenando", form.errors else : form = ResponseForm(survey=survey) camposMaterias = [form['question_18%02d'%x] for x in xrange(1,9) ] camposHerramientas = [form['question_26%02d'%x] for x in xrange(1,15) ] return render(request, 'encuesta_nuevo_padre.html', { 'form': form, 'camposMaterias1': camposMaterias[:4], 'camposMaterias2': camposMaterias[4:], 'camposHerramientas1': camposHerramientas[:7], 'camposHerramientas2': camposHerramientas[7:], })
def encuesta_estudiante(request): codigo = codigo_encuesta_session(request) if not codigo: return codigo_encuesta(request) survey = Survey.objects.get(id=3) category_items = list(survey.category_set.all()) if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): form.save() return redirect('encuesta_finalizada') else: print "error llenando", form.errors else : form = ResponseForm(survey=survey) # customizar form de acuerdo a la encuesta para padres camposMaterias = [form['question_13%02d'%x] for x in xrange(1,20) ] camposRecursos = [form['question_18%02d'%x] for x in xrange(1,8) ] camposDispositivos = [form['question_2%0d'%x] for x in xrange(2,6) ] camposInternet = [form['question_28%02d'%x] for x in xrange(1,19) ] return render(request, 'encuesta_estudiante.html', { 'form': form, 'camposMaterias1': camposMaterias[:10], 'camposMaterias2': camposMaterias[10:], 'camposRecursos1': camposRecursos[:4], 'camposRecursos2': camposRecursos[4:], 'camposDispositivos1': camposDispositivos[:2], 'camposDispositivos2': camposDispositivos[2:], 'camposInternet1': camposInternet[:9], 'camposInternet2': camposInternet[9:] })
def encuesta_nuevo_maestro(request): codigo = codigo_encuesta_session(request) if not codigo: return codigo_encuesta(request) survey = Survey.objects.get(id=5) category_items = list(survey.category_set.all()) if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): form.save() return redirect('encuesta_finalizada') else: print "error llenando", form.errors else : form = ResponseForm(survey=survey) camposHerramientas = [form['question_25%02d'%x] for x in xrange(1,18) ] #camposDispositivos = [form['question_38%02d'%x] for x in xrange(1,9) ] return render(request, 'encuesta_nuevo_maestro.html', { 'form': form, 'camposHerramientas1': camposHerramientas[:9], 'camposHerramientas2': camposHerramientas[9:] })
def survey_detail(request, survey_id): global counter survey = Survey.objects.get(id=survey_id) category_items = Category.objects.filter(survey=survey) categories = [c.category_name for c in category_items] logging.debug('\t\t\t\tCategories\n') logging.debug('Categories for this survey') logging.debug('Categories are: {}\n'.format(categories)) if request.method == 'POST': if counter < 1: form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() response.country = locate(request) response.save() counter += 1 logging.debug('Value of counter is: {}'.format(counter)) return HttpResponseRedirect("/confirm/%s" % response.interview_uuid) else: return HttpResponse('/participation.html/') else: form = ResponseForm(survey=survey) logging.debug('form print: {}'.format(form)) return render(request, 'survey.html', { 'response_form': form, 'survey': survey, 'categories': categories })
def SurveyDetail(request, id): companydetails = CompanyDetail.objects.all() survey = Survey.objects.get(id=id) category_items = Theme.objects.filter(survey=survey) categories = [c.name for c in category_items] print 'themes for this survey:' print categories if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() return HttpResponseRedirect("/confirm/%s" % response.interview_uuid) else: form = ResponseForm(survey=survey) print form # TODO sort by category return render( request, 'survey.html', { 'response_form': form, 'survey': survey, 'categories': categories, 'companydetails': companydetails })
def encuesta_docente(request): codigo = codigo_encuesta_session(request) if not codigo: return codigo_encuesta(request) survey = Survey.objects.get(id=2) category_items = list(survey.category_set.all()) if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): form.save() return redirect('encuesta_finalizada') else: print "error llenando", form.errors else : form = ResponseForm(survey=survey) # customizar form de acuerdo a la encuesta para padres #form.fields['jornada'].label = u"1. Jornada en la que enseƱas" #form.fields['institucion'].label = u"2. Nombre de tu instituciĆ³n educativa" #form.fields['nombre'].label = u"3. Nombre y apellidos" camposMaterias = [form['question_09%02d'%x] for x in xrange(1,20) ] camposHerramientas = [form['question_15%02d'%x] for x in xrange(1,30) ] camposDispositivos = [form['question_%02d'%x] for x in xrange(25,29) ] camposUsos = [form['question_31%02d'%x] for x in xrange(1,21) ] return render(request, 'encuesta_docente.html', { 'form': form, 'camposMaterias1': camposMaterias[:10], 'camposMaterias2': camposMaterias[10:], 'camposHerramientas1': camposHerramientas[:14], 'camposHerramientas2': camposHerramientas[14:], 'camposDispositivos1': camposDispositivos[:2], 'camposDispositivos2': camposDispositivos[2:], 'camposUsos1': camposUsos[:10], 'camposUsos2': camposUsos[10:] })
def encuesta_padre(request): codigo = codigo_encuesta_session(request) if not codigo: return codigo_encuesta(request) survey = Survey.objects.get(id=1) if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): form.save() return redirect('encuesta_finalizada') else: print "error llenando", form.errors else : form = ResponseForm(survey=survey) # customizar form de acuerdo a la encuesta para padres #form.fields['jornada'].label = u"1. Jornada en la que estudia su hijo(a)" #form.fields['nombre'].label = u"3. Nombre(s) y apellidos del padre de familia o acudiente" #form.fields['institucion'].label = u"5. Nombre de la instituciĆ³n educativa en la que estudia su hijo(a)" camposMaterias = [form['question_13%02d'%x] for x in xrange(1,20) ] camposDispositivos = [form['question_%d'%x] for x in xrange(23,27) ] camposUsos = [form['question_29%02d'%x] for x in xrange(1,20)] camposHerramientas = [form['question_19%02d'%x] for x in xrange(1,15) ] return render(request, 'encuesta_padre.html', { 'form': form, 'camposMaterias1': camposMaterias[:10], 'camposMaterias2': camposMaterias[10:], 'camposDispositivos1': camposDispositivos[:2], 'camposDispositivos2': camposDispositivos[2:], 'camposHerramientas1' : camposHerramientas[:7], 'camposHerramientas2' : camposHerramientas[7:], 'camposUsos1' : camposUsos[:10], 'camposUsos2' : camposUsos[10:] })
def SurveyDetail(request, survey_id, response_id): survey = Survey.objects.get(id=survey_id) response = Response.objects.get(id=response_id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] print 'categories for this survey:' print categories if request.method == 'POST': form = ResponseForm(request.POST, survey=survey, response=response) if form.is_valid(): response = form.save() return HttpResponseRedirect("/confirm/%s" % response.interview_uuid) else: form = ResponseForm(survey=survey, response=response) return render(request, 'survey.html', {'response_form': form, 'survey': survey, 'response': response, 'categories': categories})
def SurveyDetail(request, id): survey = Survey.objects.get(id=id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] print 'categories for this survey:' print categories if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() return HttpResponseRedirect("/" ) else: form = ResponseForm(survey=survey) print form # TODO sort by category return render(request, 'survey.html', {'response_form': form, 'survey': survey, 'categories': categories})
def SurveyDetail(request, id): survey = Survey.objects.get(id=id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] print "categories for this survey:" print categories if request.method == "POST": form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() return HttpResponseRedirect("/exam/confirm/%s" % response.interview_uuid) else: form = ResponseForm(survey=survey) print form # TODO sort by category return render(request, "survey.html", {"response_form": form, "survey": survey, "categories": categories})
def SurveyDetail(request, id): survey = Survey.objects.get(id=id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] if request.method == 'POST': form = ResponseForm(request.POST, survey=survey, request=request) if form.is_valid(): response = form.save() return HttpResponseRedirect("/confirm/%s" % response.interview_uuid) else: form = ResponseForm(survey=survey, request=request) return render_to_response('survey.html', RequestContext(request, {'response_form': form, 'survey': survey, 'categories': categories}))
def SurveyDetail(request, id): survey = Survey.objects.get(id=id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] print 'categories for this survey:' print categories if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() return HttpResponseRedirect( urlresolvers.reverse('confirmation', kwargs={'uuid': response.interview_uuid})) else: form = ResponseForm(survey=survey) print form # TODO sort by category return render(request, 'survey/survey.html', {'response_form': form, 'survey': survey, 'categories': categories})
def SurveyDetail(request, id): survey = Survey.objects.get(id=id) category_items = Category.objects.filter(survey=survey) categories = [c.name for c in category_items] print 'categories for this survey:' print categories if request.method == 'POST': form = ResponseForm(request.POST, survey=survey) if form.is_valid(): response = form.save() return HttpResponseRedirect( urlresolvers.reverse('confirmation', kwargs={'uuid': response.interview_uuid})) else: form = ResponseForm(survey=survey) print form # TODO sort by category return render(request, 'survey/survey.html', { 'response_form': form, 'survey': survey, 'categories': categories })
def SurveyDetail(request, response_id, id, p): survey = Survey.objects.get(id=id) pagina_original = p #Lleno preguntas de la pagina de esa encuesta category_items = Category.objects.filter(survey=survey, name=str(p)) #Seteo booleans para workflow formnuevo = False formcorrecto = True if '_siguiente' in request.POST: #Chequeo si la respuesta seleccionada implica un salto en los formularios (solo si es siguiente) salta_a_otra = False for key in request.POST: if key.startswith('question'): value = request.POST[key] if value != '': question_id = key[9:] questions = Question.objects.filter(survey=survey, id=int(question_id)) if questions: for question in questions: if question.choices_salta_a_opcion == value: #esa respuesta tiene un "salta a" salta_a_otra = True pagina_nueva = question.choices_salta_a_numero else: if not salta_a_otra: pagina_nueva = question.choice_salta_por_default #Si se presiono siguiente - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems( ): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category #Grabo nuevo o update if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: #Tengo que ver si ya existe o no questions_actual = Question.objects.filter( id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: form_grabar.save(request.user, field_name, field_value, '0') else: formcorrecto = False if formcorrecto: p = pagina_nueva category_items = Category.objects.filter(survey=survey, name=str(p)) #Chequear response_id, para ver si ya esta llena la pagina siguiente o no if response_id == '0': form_nuevo = ResponseForm(category=p, id=response_id, interviewee=request.user, survey=survey) else: responses_siguiente = Response.objects.filter( interviewee=request.user, survey=survey, category=p).order_by('id')[:1] if responses_siguiente: for response_siguiente in responses_siguiente: form_nuevo = ResponseForm(category=p, id=response_siguiente.id, interviewee=request.user, survey=survey) else: form_nuevo = ResponseForm(category=p, id=response_id, interviewee=request.user, survey=survey) formnuevo = True elif '_anterior' in request.POST: #Si se presiono anterior - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems( ): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: questions_actual = Question.objects.filter( id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: formcorrecto = False form_nuevo = None if formcorrecto: #Loop en responses, para encontrar el primer response de la pagina anterior responses = Response.objects.filter( interviewee=request.user, survey=survey).order_by('-category') for response_anterior in responses: if (response_anterior.category.name != str(p)) and (int( response_anterior.category.name) < int(p)): p_nuevo = response_anterior.category.name break p = int(p_nuevo) category_items = Category.objects.filter(survey=survey, name=str(p_nuevo)) response_anterior = Response.objects.filter( interviewee=request.user, survey=survey, category=p_nuevo)[:1] if response_anterior: form_nuevo = ResponseForm( category=response_anterior[0].category, id=response_anterior[0].id, interviewee=request.user, survey=survey) formnuevo = True elif '_finalizar' in request.POST: #Si se presiono finalizar - redirecciono a la pagina de saludo form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems( ): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: questions_actual = Question.objects.filter( id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: form_grabar.save(request.user, field_name, field_value, '0') return HttpResponseRedirect("/confirm/%s" % request.user.username) else: formcorrecto = False #Chequeo el form if not request.method == 'POST': #Si es para edicion, tengo que pasarle un parametro de response form = ResponseForm(category=pagina_original, id=response_id, interviewee=request.user, survey=survey) #Reviso si es la ultima categoria para no mostrar Siguiente (mostrar "Finalizar") ultima = False ultimas_categorias = Category.objects.filter( survey=survey).order_by('-name')[:1] for ultima_categoria in ultimas_categorias: if int(ultima_categoria.name) == int(p): ultima = True #Calcular porcentaje de llenado surveys_paginas_totales = survey.categories().order_by('-name')[:1] for survey_paginas_totales in surveys_paginas_totales: porcentaje = (int(p) - 1) * 100 / int(survey_paginas_totales.name) if formcorrecto: if formnuevo: return render( request, 'survey.html', { 'response_form': form_nuevo, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'response_id': response_id, 'porcentaje': porcentaje }) else: return render( request, 'survey.html', { 'response_form': form, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'response_id': response_id, 'porcentaje': porcentaje }) else: #form con errores return render( request, 'survey.html', { 'response_form': form_sin_grabar, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'form_errors': form_sin_grabar.errors, 'response_id': response_id, 'porcentaje': porcentaje })
def SurveyDetail(request, response_id, id, p): survey = Survey.objects.get(id=id) pagina_original = p #Lleno preguntas de la pagina de esa encuesta category_items = Category.objects.filter(survey=survey, name=str(p)) #Seteo booleans para workflow formnuevo = False formcorrecto = True if '_siguiente' in request.POST: #Chequeo si la respuesta seleccionada implica un salto en los formularios (solo si es siguiente) salta_a_otra = False for key in request.POST: if key.startswith('question'): value = request.POST[key] if value != '': question_id = key[9:] questions = Question.objects.filter(survey=survey, id=int(question_id)) if questions: for question in questions: if question.choices_salta_a_opcion == value: #esa respuesta tiene un "salta a" salta_a_otra = True pagina_nueva = question.choices_salta_a_numero else: if not salta_a_otra: pagina_nueva = question.choice_salta_por_default #Si se presiono siguiente - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category #Grabo nuevo o update if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: #Tengo que ver si ya existe o no questions_actual = Question.objects.filter(id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter(survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: form_grabar.save(request.user, field_name, field_value, '0') else: formcorrecto = False if formcorrecto: p = pagina_nueva category_items = Category.objects.filter(survey=survey, name=str(p)) #Chequear response_id, para ver si ya esta llena la pagina siguiente o no if response_id == '0': form_nuevo = ResponseForm(category=p, id=response_id, interviewee=request.user, survey=survey) else: responses_siguiente = Response.objects.filter(interviewee=request.user,survey=survey,category=p).order_by('id')[:1] if responses_siguiente: for response_siguiente in responses_siguiente: form_nuevo = ResponseForm(category=p, id=response_siguiente.id, interviewee=request.user, survey=survey) else: form_nuevo = ResponseForm(category=p, id=response_id, interviewee=request.user, survey=survey) formnuevo = True elif '_anterior' in request.POST: #Si se presiono anterior - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: questions_actual = Question.objects.filter(id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter(survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: formcorrecto = False form_nuevo = None if formcorrecto: #Loop en responses, para encontrar el primer response de la pagina anterior responses = Response.objects.filter(interviewee=request.user,survey=survey).order_by('-category') for response_anterior in responses: if (response_anterior.category.name != str(p)) and (int(response_anterior.category.name) < int(p)): p_nuevo = response_anterior.category.name break p = int(p_nuevo) category_items = Category.objects.filter(survey=survey, name=str(p_nuevo)) response_anterior = Response.objects.filter(interviewee=request.user,survey=survey,category=p_nuevo)[:1] if response_anterior: form_nuevo = ResponseForm(category=response_anterior[0].category, id=response_anterior[0].id, interviewee=request.user, survey=survey) formnuevo = True elif '_finalizar' in request.POST: #Si se presiono finalizar - redirecciono a la pagina de saludo form_sin_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_sin_grabar.survey = survey form_sin_grabar.interviewee = request.user for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): #Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm(request.POST, category=pagina_original, id=response_id, interviewee=request.user, survey=survey) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == '0': form_grabar.save(request.user, field_name, field_value, response_id) else: questions_actual = Question.objects.filter(id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter(survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(request.user, field_name, field_value, response_to_save) else: form_grabar.save(request.user, field_name, field_value, '0') return HttpResponseRedirect("/confirm/%s" % request.user.username) else: formcorrecto = False #Chequeo el form if not request.method == 'POST': #Si es para edicion, tengo que pasarle un parametro de response form = ResponseForm(category=pagina_original, id=response_id, interviewee=request.user, survey=survey) #Reviso si es la ultima categoria para no mostrar Siguiente (mostrar "Finalizar") ultima = False ultimas_categorias = Category.objects.filter(survey=survey).order_by('-name')[:1] for ultima_categoria in ultimas_categorias: if int(ultima_categoria.name) == int(p): ultima = True #Calcular porcentaje de llenado surveys_paginas_totales = survey.categories().order_by('-name')[:1] for survey_paginas_totales in surveys_paginas_totales: porcentaje = (int(p)-1)*100/int(survey_paginas_totales.name) if formcorrecto: if formnuevo: return render(request, 'survey.html', {'response_form': form_nuevo, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'response_id': response_id, 'porcentaje': porcentaje}) else: return render(request, 'survey.html', {'response_form': form, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'response_id': response_id,'porcentaje': porcentaje}) else: #form con errores return render(request, 'survey.html', {'response_form': form_sin_grabar, 'survey': survey, 'category_items': category_items, 'ultima': ultima, 'estudiante': request.user.id, 'form_errors': form_sin_grabar.errors, 'response_id': response_id, 'porcentaje': porcentaje})
def SurveyDetail(request, response_id, id, p, operador, egresado_id): survey = Encuesta.objects.get(id=id) pagina_original = p # Lleno preguntas de la pagina de esa encuesta category_items = Pagina.objects.filter(survey=survey, name=str(p)) # Seteo booleans para workflow formnuevo = False formcorrecto = True if operador == "1": usuario = User.objects.get(id=egresado_id) else: usuario = request.user if "_siguiente" in request.POST: # Chequeo si la respuesta seleccionada implica un salto en los formularios (solo si es siguiente) salta_a_otra = False for key in request.POST: if key.startswith("question"): value = request.POST[key] if value != "": question_id = key[9:] questions = Pregunta.objects.filter(survey=survey, id=int(question_id)) if questions: for question in questions: if question.choices_salta_a_opcion == value: # esa respuesta tiene un "salta a" salta_a_otra = True pagina_nueva = question.choices_salta_a_numero else: if not salta_a_otra: pagina_nueva = question.choice_salta_por_default # Si se presiono siguiente - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=egresado_id, survey=survey ) form_sin_grabar.interviewee = usuario form_sin_grabar.survey = survey for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): # Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=usuario, survey=survey ) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category # Grabo nuevo o update if response_id == "0": form_grabar.save(usuario, field_name, field_value, response_id) else: # Tengo que ver si ya existe o no questions_actual = Pregunta.objects.filter(id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual, ) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(usuario, field_name, field_value, response_to_save) else: form_grabar.save(usuario, field_name, field_value, "0") else: formcorrecto = False if formcorrecto: p = pagina_nueva category_items = Pagina.objects.filter(survey=survey, name=str(p)) # Chequear response_id, para ver si ya esta llena la pagina siguiente o no if response_id == "0": form_nuevo = ResponseForm(category=p, id=response_id, interviewee=usuario, survey=survey) else: responses_siguiente = Response.objects.filter(interviewee=usuario, survey=survey, category=p).order_by( "id" )[:1] if responses_siguiente: for response_siguiente in responses_siguiente: form_nuevo = ResponseForm( category=p, id=response_siguiente.id, interviewee=usuario, survey=survey ) else: form_nuevo = ResponseForm(category=p, id=response_id, interviewee=usuario, survey=survey) formnuevo = True elif "_anterior" in request.POST: # Si se presiono anterior - me muevo a la pagina correspondiente form_sin_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=usuario, survey=survey ) form_sin_grabar.survey = survey form_sin_grabar.interviewee = usuario for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): # Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=usuario, survey=survey ) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == "0": form_grabar.save(usuario, field_name, field_value, response_id) else: questions_actual = Pregunta.objects.filter(id=field_name[9:]) for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual, ) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(usuario, field_name, field_value, response_to_save) else: formcorrecto = False form_nuevo = None if formcorrecto: # Loop en responses, para encontrar el primer response de la pagina anterior responses = Response.objects.filter(interviewee=usuario, survey=survey).order_by("-category") for response_anterior in responses: if (response_anterior.category.name != str(p)) and (int(response_anterior.category.name) < int(p)): p_nuevo = response_anterior.category.name break p = int(p_nuevo) category_items = Pagina.objects.filter(survey=survey, name=str(p_nuevo)) response_anterior = Response.objects.filter(interviewee=usuario, survey=survey, category=p_nuevo)[:1] if response_anterior: form_nuevo = ResponseForm( category=response_anterior[0].category, id=response_anterior[0].id, interviewee=usuario, survey=survey, ) formnuevo = True elif "_finalizar" in request.POST: # Si se presiono finalizar - redirecciono a la pagina de saludo form_sin_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=usuario, survey=survey ) form_sin_grabar.survey = survey form_sin_grabar.interviewee = usuario for categoria in category_items: form_sin_grabar.category = categoria if form_sin_grabar.is_valid(): for field_name, field_value in form_sin_grabar.cleaned_data.iteritems(): if field_name.startswith("question_"): # Creo un form nuevo y lo grabo por cada campo form_grabar = ResponseForm( request.POST, category=pagina_original, id=response_id, interviewee=usuario, survey=survey ) form_grabar.survey = form_sin_grabar.survey form_grabar.interviewee = form_sin_grabar.interviewee form_grabar.category = form_sin_grabar.category if response_id == "0": form_grabar.save(usuario, field_name, field_value, response_id) else: questions_actual = Pagina.objects.filter(id=field_name[9:]) responses_actual = None for question_actual in questions_actual: responses_actual = Response.objects.filter( survey=form_sin_grabar.survey, interviewee=form_sin_grabar.interviewee, category=form_sin_grabar.category, question=question_actual, ) if responses_actual: response_to_save = 0 for response_actual in responses_actual: response_to_save = response_actual.id form_grabar.save(usuario, field_name, field_value, response_to_save) else: form_grabar.save(usuario, field_name, field_value, "0") return HttpResponseRedirect("/confirm/%s" % usuario.username) else: formcorrecto = False # Chequeo el form if not request.method == "POST": # Si es para edicion, tengo que pasarle un parametro de response form = ResponseForm(category=pagina_original, id=response_id, interviewee=usuario, survey=survey) # Reviso si es la ultima categoria para no mostrar Siguiente (mostrar "Finalizar") ultima = False ultimas_categorias = survey.categories()[:1] for ultima_categoria in ultimas_categorias: if int(ultima_categoria.name) == int(p): ultima = True # Calcular porcentaje de llenado # surveys_paginas_totales = survey.categories().order_by('-name')[:1] surveys_paginas_totales = survey.categories()[:1] for survey_paginas_totales in surveys_paginas_totales: porcentaje = (int(p) - 1) * 100 / int(survey_paginas_totales.name) if formcorrecto: if formnuevo: if operador == "1": return render( request, "survey.html", { "response_form": form_nuevo, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "response_id": response_id, "porcentaje": porcentaje, "operador": 1, "egresado_id": egresado_id, }, ) else: return render( request, "survey.html", { "response_form": form_nuevo, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "response_id": response_id, "porcentaje": porcentaje, "operador": 0, "egresado_id": 0, }, ) else: if operador == "1": return render( request, "survey.html", { "response_form": form, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "response_id": response_id, "porcentaje": porcentaje, "operador": 1, "egresado_id": egresado_id, }, ) else: return render( request, "survey.html", { "response_form": form, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "response_id": response_id, "porcentaje": porcentaje, "operador": 0, "egresado_id": 0, }, ) else: # form con errores if operador == "1": return render( request, "survey.html", { "response_form": form_sin_grabar, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "form_errors": form_sin_grabar.errors, "response_id": response_id, "porcentaje": porcentaje, "operador": 1, "egresado_id": egresado_id, }, ) else: return render( request, "survey.html", { "response_form": form_sin_grabar, "survey": survey, "category_items": category_items, "ultima": ultima, "estudiante": usuario.id, "form_errors": form_sin_grabar.errors, "response_id": response_id, "porcentaje": porcentaje, "operador": 0, "egresado_id": 0, }, )