Beispiel #1
0
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
Beispiel #2
0
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)
Beispiel #3
0
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))
    ]
Beispiel #4
0
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
Beispiel #5
0
    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)
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
 def get_success_url(self):
     return enunciados_url_parser.url_enunciado(self.materia_carrera,
                                                self.enunciado)
Beispiel #10
0
 def url_ver_enunciado(self):
     return enunciados_url_parser.url_enunciado(self.materia_carrera,
                                                self.enunciado)
Beispiel #11
0
 def get_success_url(self):
     materia_carrera = self.kwargs['materia_carrera']
     return enunciados_url_parser.url_enunciado(
         materia_carrera, self.get_object())