# -*- coding: utf-8 -*-
"""
Sistema Automatizado de Planificación Integral Comunal SAPIC
Copyleft (@) 2017 CENDITEL nodo Mérida - Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/WikiStart#a5.-SistemaAutomatizadodePlanificaciónIntegralComunalSAPIC
"""
## @package explicacion_situacional.views
#
# Vistas correspondientes a la explicacion situacional
# @author Ing. Erwin Paredes (eparedes at cenditel.gob.ve)
# @author Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
# (CENDITEL) nodo Mérida - Venezuela
# @copyright GNU Public License versión 2 (GPLv2)
# @version 1.0
import time
import datetime
from django.contrib import messages
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from explicacion_situacional.modelsEncuestas.modelsParticipacion import (
RespuestaSino, RespuestaOpciones,
RespuestaAbierta, RespuestaUbicacion
)
from django.views.generic import (
TemplateView,
UpdateView
)
from django.contrib import messages
from utils.views import LoginRequeridoPerAuth
from django.contrib.gis import forms
from explicacion_situacional.modelsEncuestas.modelsConsultas import (
Consulta,
Opcion,
)
from .forms import (
RespuestaSinoForm, RespuestaAbiertaForm ,
RespuestaOpcionesForm
)
class ModificarRespuestaView(LoginRequeridoPerAuth, TemplateView):
"""!
Clase que mustra el template y gestiona la vista para modificar una respuesta en una encuesta
@author Manuel Zambrano
@copyright GNU Public License versión 2 (GPLv2)
@date 30-08-2018
@version 1.0.0
"""
template_name = 'modificar.respuesta.html'
group_required = [u"Administradores", u"Voceros", u"Integrantes"]
def get(self,*arg,**kwargs):
"""!
Metodo que maneja las peticiones HTTP GET de la vista, Carga los valores iniciales al formulario
@author Manuel Zambrano
@copyright GNU Public License versión 2 (GPLv2)
@date 30-08-2018
@param self {object} Objeto que instancia la clase
@param kwargs {object} Objeto que contiene las variables de la url
@param arg {object}
@return retorna los datos de contexto
"""
if kwargs['tipo'] == '1' :
respuesta = RespuestaOpciones.objects.select_related().get(
pk = kwargs['pk'],
user=self.request.user
)
formulario = RespuestaOpcionesForm()
formulario.fields['respuesta']._set_queryset(Opcion.objects.filter(
pregunta=respuesta.opcion.pregunta
))
formulario.fields['respuesta'].initial= respuesta.opcion
if kwargs['tipo'] == '4' : #Hacer para cada tipo de respuesta8
respuesta = RespuestaSino.objects.select_related().get(
pk = kwargs['pk'],
user=self.request.user
)
if respuesta.respuesta == True:
formulario = RespuestaSinoForm(initial={
'respuesta':respuesta.respuesta,
})
else:
justificacion = RespuestaAbierta.objects.select_related().get(
user = self.request.user,
pregunta = respuesta.pregunta
)
formulario = RespuestaSinoForm(initial={
'respuesta':respuesta.respuesta,
'justificacion':justificacion.texto_respuesta,
})
if kwargs['tipo'] == '5' :
respuesta = RespuestaAbierta.objects.select_related().get(
pk = kwargs['pk'],
user=self.request.user
)
formulario = RespuestaAbiertaForm(initial={
'respuesta':respuesta.texto_respuesta,
})
kwargs['formulario'] = formulario
kwargs['o'] = respuesta
return super(ModificarRespuestaView,self).get(self,**kwargs)
def post(self,*arg,**kwargs):
"""!
Metodo que maneja las peticiones HTTP POST de la vista, Guarda la modificacion de la pregunta
@author Manuel Zambrano
@copyright GNU Public License versión 2 (GPLv2)
@date 03-09-2018
@param self {object} Objeto que instancia la clase
@param kwargs {object} Objeto que contiene las variables de la url
@param arg {object}
@return Redirecciona a la tabla de ecuestas
"""
if kwargs['tipo'] == '1' :
respuesta = RespuestaOpciones.objects.select_related().get(
pk = kwargs['pk'],
user=self.request.user
)
formulario = RespuestaOpcionesForm(self.request.POST,initial={
'respuesta':respuesta.opcion,
})
if formulario.is_valid() and formulario.has_changed():
opcion = formulario.cleaned_data['respuesta']
respuesta.opcion = opcion
respuesta.save()
if kwargs['tipo'] == '5':
respuesta = RespuestaAbierta.objects.select_related().get(
pk = kwargs['pk'],
user=self.request.user
)
formulario = RespuestaAbiertaForm(self.request.POST, initial={
'respuesta':respuesta.texto_respuesta,
})
if formulario.is_valid() and formulario.has_changed():
texto_respuesta = formulario.cleaned_data['respuesta']
respuesta.texto_respuesta = texto_respuesta
respuesta.save()
if kwargs['tipo'] == '4':
respuesta = RespuestaSino.objects.select_related().get(
pk = kwargs['pk'],
user = self.request.user
)
formulario = RespuestaSinoForm(self.request.POST)
if formulario.is_valid():
if formulario.cleaned_data['respuesta'] :
respuesta.respuesta = formulario.cleaned_data['respuesta']
respuesta.save()
else:
try:
justificacion = RespuestaAbierta.objects.select_related().get(
user = self.request.user,
pregunta = respuesta.pregunta
)
texto_respuesta = formulario.cleaned_data['justificacion']
justificacion.texto_respuesta = texto_respuesta
justificacion.es_justificacion = True
respuesta.respuesta = formulario.cleaned_data['respuesta']
respuesta.save()
justificacion.save()
except:
justificacion = RespuestaAbierta()
justificacion.pregunta = respuesta.pregunta
justificacion.texto_respuesta = formulario.cleaned_data['justificacion']
justificacion.user = self.request.user
justificacion.es_justificacion = True
justificacion.save()
respuesta.respuesta = formulario.cleaned_data['respuesta']
respuesta.save()
else :
messages.error(self.request, 'Error el formulario \
No es Valido') #provicional, mientras se valida el formulario con js
return redirect(self.request.META.get("HTTP_REFERER"))