# -*- 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.genericEncuestasViews # # Vistas correspondientes a la explicacion situacional # @author Ing. Leonel Paolo Hernandez Macchiarulo (lhernandez 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 from django.contrib import messages from django.contrib.auth.models import ( User ) from django.shortcuts import render from django.views.generic.edit import ( FormView, UpdateView ) from django.views.generic import ( TemplateView, ListView ) from django.http import JsonResponse from explicacion_situacional.forms import ( ExplicacionForms, UbicacionForms ) from explicacion_situacional.modelsEncuestas.modelsConsultas import ( Pregunta, Consulta, Opcion ) from explicacion_situacional.modelsEncuestas.modelsParticipacion import ( RespuestaSino, RespuestaOpciones, RespuestaAbierta, RespuestaUbicacion ) from explicacion_situacional.constantes import ( TIPOS_PREGUNTAS ) from utils.views import LoginRequeridoPerAuth class EncuestasParticiparView(LoginRequeridoPerAuth, TemplateView): """! Clase que gestiona la vista principal de la encuesta a la que va a participar @author Ing. Leonel Paolo Hernandez Macchiarulo (lhernandez at cenditel.gob.ve) @copyright GNU Public License versión 2 (GPLv2) @date 20-09-2017 @version 1.0.0 """ template_name = "encuesta.participar.html" #template_name = "caracterizacion.social.html" group_required = [u"Administradores", u"Voceros", u"Integrantes"] def get_context_data(self, **kwargs): """! Metodo que permite cargar de nuevo valores en los datos de contexto de la vista @author Rodrigo Boet (rboet at cenditel.gob.ve) @copyright GNU/GPLv2 @date 23-02-2017 @param self {object} Objeto que instancia la clase @param kwargs {object} Objeto que contiene los datos de contexto @return Retorna los datos de contexto """ valores = {} try: consulta = Consulta.objects.select_related().get(pk=kwargs['pk']) except: consulta = '' for pregunta in Pregunta.objects.filter(consulta_id=kwargs['pk']).all(): label = '' campo = '' if pregunta.tipo_pregunta.id == TIPOS_PREGUNTAS['SELECT_SIMPLE']: campo = '' for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all(): campo += '' elif pregunta.tipo_pregunta.id == TIPOS_PREGUNTAS['SELECT_MULTIP']: campo = '' for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all(): campo += '' elif pregunta.tipo_pregunta.id > TIPOS_PREGUNTAS['SELECT_MULTIP'] and pregunta.tipo_pregunta.id < TIPOS_PREGUNTAS['ABIERTA']: campo += '' if(pregunta.tipo_pregunta.id == TIPOS_PREGUNTAS['SI_NO']): campo += '' else: campo += '' campo += '' elif pregunta.tipo_pregunta.id == TIPOS_PREGUNTAS['UBICACION']: campo += '\ \
\
\ Delete all Features\ \ \ \
' else: campo = '' valores[pregunta.id] = {'label':label,'field':campo} print (valores) kwargs['preguntas'] = valores kwargs['consulta'] = consulta return super(EncuestasParticiparView, self).get_context_data(**kwargs) def post(self, request, pk): """! Metodo que sobreescribe el post del formulario @author Rodrigo Boet (rboet at cenditel.gob.ve) @copyright GNU/GPLv2 @date 20-03-2017 @param self {object} Objeto que instancia la clase @param request {object} Objeto que instancia la petición @param pk {int} Recibe el id de la consulta @return Retorna los datos de contexto """ data = dict(request.POST) del data['csrfmiddlewaretoken'] if self.request.is_ajax(): for key in data.keys(): parent_id = key.split("_")[-1] if 'sino' in key: value = True if data[key][0] == 'Si' else False justify_id = 'consulta_respuesta_justificar_'+str(parent_id) self.crear_respuesta_sino(parent_id,value, self.request.user.id) if(not value and justify_id in data.keys()): respuesta = data[justify_id][0] self.crear_respuesta_abierta(parent_id, respuesta,self.request.user.id,True) elif 'radio' in key or 'check' in key: for value in data[key]: self.crear_respuesta_opciones(value, self.request.user.id) elif 'abierta' in key: value = data[key][0] self.crear_respuesta_abierta(parent_id, value, self.request.user.id) return JsonResponse({"code":True}) return redirect(reverse_lazy('explicacions:condicion_suelos',kwargs={'pk':pk})) def crear_respuesta_sino(self, parent_id, value, user_id): """! Metodo para crear una respuesta de si/no @author Rodrigo Boet (rboet at cenditel.gob.ve) @copyright GNU/GPLv2 @date 27-03-2017 @param self {object} Objeto que instancia la clase @param parent_id {int} Recibe el número del id del padre @param value {bool} Recibe el valor de la respuesta @param user_id {int} Recibe el id del user @return Retorna los datos de contexto """ user = User.objects.get(id=user_id) parent = Pregunta.objects.get(pk=parent_id) respuesta = RespuestaSino() respuesta.pregunta = parent respuesta.respuesta = value respuesta.user = user respuesta.save() def crear_respuesta_opciones(self, parent_id, user_id): """! Metodo para crear una respuesta de selección simple y múltiple @author Rodrigo Boet (rboet at cenditel.gob.ve) @copyright GNU/GPLv2 @date 28-03-2017 @param self {object} Objeto que instancia la clase @param parent_id {int} Recibe el número del id del padre @param user_id {int} Recibe el id del user @return Retorna los datos de contexto """ user = User.objects.get(id=user_id) parent = Opcion.objects.get(pk=parent_id) respuesta = RespuestaOpciones() respuesta.opcion = parent respuesta.user = user respuesta.save() def crear_respuesta_abierta(self, parent_id, value, user_id, es_justificacion=False): """! Metodo para crear una respuesta abierta @author Rodrigo Boet (rboet at cenditel.gob.ve) @copyright GNU/GPLv2 @date 28-03-2017 @param self {object} Objeto que instancia la clase @param parent_id {int} Recibe el número del id del padre @param value {str} Recibe el valor de la respuesta @param user_id {int} Recibe el id del user @param es_justificacion {bool} Recibe el párametro que indica si es una justifiación @return Retorna los datos de contexto """ user = User.objects.get(id=user_id) parent = Pregunta.objects.get(pk=parent_id) respuesta = RespuestaAbierta() respuesta.pregunta = parent respuesta.texto_respuesta = value respuesta.user = user respuesta.es_justificacion = es_justificacion respuesta.save()