def handle_post(request, materia_carrera, conjunto, enunciado_encontrado): numero_anterior = enunciado_encontrado.numero enunciado_form = EnunciadoConConjuntoForm(conjunto, request.POST, instance=enunciado_encontrado) version_texto_form = VersionTextoForm(request.POST) response = None if enunciado_form.is_valid() and version_texto_form.is_valid(): nuevo_numero = enunciado_form.cleaned_data['numero'] texto_nuevo = version_texto_form.cleaned_data['texto'] cambio_texto = se_cambio_texto(enunciado_encontrado, texto_nuevo) if numero_anterior == nuevo_numero and not cambio_texto: version_texto_form.add_error( 'texto', ValidationError(_('No se cambió el texto.'))) else: enunciado = crear_enunciado_con_forms(enunciado_form, version_texto_form, get_sentinel_user(), cambio_texto) success_url = enunciados_url_parser.url_enunciado( materia_carrera, enunciado) response = redirect(success_url) if not response: response = render_editar_enunciado(request, materia_carrera, enunciado_form, version_texto_form, enunciado_encontrado) return response
def nuevo_enunciado(request, **kwargs): conjunto = conjuntos_url_parser.kwargs_a_conjunto(kwargs) materia_carrera = kwargs['materia_carrera'] if request.method == 'POST': enunciado_form = EnunciadoConConjuntoForm(conjunto, request.POST) version_texto_form = VersionTextoForm(request.POST) if enunciado_form.is_valid() and version_texto_form.is_valid(): enunciado = enunciado_form.save() version_texto = version_texto_form.save(commit=False) version_texto.enunciado = enunciado version_texto.save() success_url = enunciados_url_parser.url_enunciado( materia_carrera, enunciado) return redirect(success_url) else: enunciado_form = EnunciadoConConjuntoForm(conjunto) version_texto_form = VersionTextoForm() context = { 'carrera': materia_carrera.carrera, 'materia_carrera': materia_carrera, 'enunciado_form': enunciado_form, 'version_texto_form': version_texto_form, 'breadcrumb': breadcrumb_crear_enunciado(materia_carrera, conjunto), } return render(request, 'enunciados/nuevo_enunciado.html', context)
def breadcrumb_ver_enunciado(materia_carrera, enunciado): breadcrumb_conjunto = breadcrumb_conjunto_de_enunciados( materia_carrera, conjuntos_utils.castear_a_subclase(enunciado.conjunto)) return breadcrumb_conjunto + [ BreadcrumbPage( enunciado, enunciados_url_parser.url_enunciado(materia_carrera, enunciado)) ]
def guardar_enunciado(enunciado_form, materia_carrera, version_texto_form): enunciado = enunciado_form.save() success_url = enunciados_url_parser.url_enunciado(materia_carrera, enunciado) if version_texto_form.is_valid(): guardar_version_texto(enunciado, version_texto_form, get_sentinel_user()) response = redirect(success_url) return response
def test_editar_enunciado_redirecciona_a_ver_enunciado(self): url = self.url_editar_enunciado() texto = "asasdasdasdds" response = self.client.post(url, { 'numero': NUMERO_ENUNCIADO, 'texto': texto }) self.assertEquals(response.status_code, HTTPStatus.FOUND) url_redir = enunciados_url_parser.url_enunciado( self.materia_carrera, self.enunciado) self.assertEquals(response.url, url_redir) self.enunciado.refresh_from_db() self.assertEquals(self.enunciado.versiones.ultima().texto, texto)
def enunciado(request, **kwargs): materia_carrera = kwargs['materia_carrera'] enunciado_encontrado = enunciados_url_parser.kwargs_a_enunciado(kwargs) conjunto = enunciado_encontrado.conjunto if request.method == 'POST': numero_anterior = enunciado_encontrado.numero enunciado_form = EnunciadoConConjuntoForm( conjunto, request.POST, instance=enunciado_encontrado) version_texto_form = VersionTextoForm(request.POST) if enunciado_form.is_valid() and version_texto_form.is_valid(): hubo_error = False nuevo_numero = enunciado_form.cleaned_data['numero'] texto_nuevo = version_texto_form.cleaned_data['texto'] cambio_texto = se_cambio_texto(enunciado_encontrado, texto_nuevo) if numero_anterior == nuevo_numero and not cambio_texto: version_texto_form.add_error( 'texto', ValidationError(_('No se cambió el texto.'))) hubo_error = True if not hubo_error: enunciado = enunciado_form.save() if cambio_texto: version_texto = version_texto_form.save(commit=False) version_texto.enunciado = enunciado version_texto.save() success_url = enunciados_url_parser.url_enunciado( materia_carrera, enunciado) return redirect(success_url) else: enunciado_form = EnunciadoConConjuntoForm( conjunto, initial={'numero': enunciado_encontrado.numero}) version_texto_form = VersionTextoForm( initial={'texto': enunciado_encontrado.versiones.ultima().texto}) context = { 'materia_carrera': materia_carrera, 'carrera': materia_carrera.carrera, 'enunciado_form': enunciado_form, 'version_texto_form': version_texto_form, 'breadcrumb': breadcrumb_editar_enunciado(materia_carrera, enunciado_encontrado) } return render(request, 'enunciados/editar_enunciado.html', context)
def editar_solucion(request, pk_solucion, **kwargs): materia_carrera = kwargs['materia_carrera'] solucion = get_object_or_404(Solucion, pk=pk_solucion) usuario = get_sentinel_user() if request.method == 'POST': form = VersionTextoSolucionForm(solucion, usuario, request.POST) if form.is_valid(): deberia_sumar_puntos = no_edito_solucion(solucion, usuario) form.save() if deberia_sumar_puntos: dar_puntos_a_usuario(usuario) success_url = enunciados_url_parser.url_enunciado( materia_carrera, solucion.enunciado_padre) return redirect(success_url) else: form = VersionTextoSolucionForm( solucion, usuario, initial={'texto': solucion.versiones.ultima().texto}) contexto = { 'materia_carrera': materia_carrera, 'carrera': materia_carrera.carrera, 'form': form, 'solucion': solucion, 'enunciado': solucion.enunciado_padre, 'breadcrumb': breadcrumb_editar_solucion(materia_carrera, solucion.enunciado_padre), 'texto_boton': _('Enviar'), } return render(request, 'enunciados/nueva_solucion.html', contexto)
def editar_solucion(request, pk_solucion, **kwargs): materia_carrera = kwargs['materia_carrera'] solucion = get_object_or_404(Solucion, pk=pk_solucion) if request.method == 'POST': form = VersionTextoSolucionForm(solucion, request.POST) if form.is_valid(): form.save() success_url = enunciados_url_parser.url_enunciado( materia_carrera, solucion.enunciado) return redirect(success_url) else: form = VersionTextoSolucionForm( solucion, initial={'texto': solucion.versiones.ultima().texto}) contexto = { 'materia_carrera': materia_carrera, 'carrera': materia_carrera.carrera, 'form': form, 'solucion': solucion, 'enunciado': solucion.enunciado, 'breadcrumb': breadcrumb_editar_solucion( materia_carrera, solucion.enunciado), } return render(request, 'enunciados/nueva_solucion.html', contexto)
def get_success_url(self): return enunciados_url_parser.url_enunciado(self.materia_carrera, self.enunciado)
def url_ver_enunciado(self): return enunciados_url_parser.url_enunciado(self.materia_carrera, self.enunciado)
def get_success_url(self): materia_carrera = self.kwargs['materia_carrera'] return enunciados_url_parser.url_enunciado( materia_carrera, self.get_object())