Conjunto bcf369a en consulta_publica


Ignorar:
Fecha y hora:
18/07/2017 12:01:38 (hace 7 años)
Autor:
rudmanmrrod <rudman22@…>
Branches:
constituyente, estudiantes, general, plan_patria, sala
Children:
59f3e60
Parents:
38855e2
Mensaje:

Agregados cambios para adaptar la consulta a la sala situacional

Ficheros:
1 añadido
5 editados

Leyenda

No modificado
Añadido
Eliminado
  • participacion/models.py

    r2645b43 rbcf369a  
    3333    ## Respuesta
    3434    respuesta = models.BooleanField()
    35 
    36     ## Id del objetivo
    37     objetivo = models.IntegerField()
    3835   
    3936    ## Relación con el user
     
    5148    ## Relación con la opción de la respuesta
    5249    opcion = models.ForeignKey(Opcion)
    53 
    54     ## Id del objetivo
    55     objetivo = models.IntegerField()
    5650   
    5751    ## Relación con el user
  • participacion/templates/participacion.search.html

    r250830e rbcf369a  
    1010                <div class="row text-center">
    1111                    <h1>Seleccione</h1><hr>
     12                    <p>A continuación seleccione un objetivo y realice aportes o propuestas que Ud. considere pertinentes para la discusión de la
     13                    Asamblea Nacional Constituyente.</p>
     14                    <p>Puede participar una vez en cada objetivo programático.</p><br>
    1215                    <div class="row">
    1316                        <div class="form-group {% if form.objetivo.errors %}has-error{% endif %}">
  • participacion/urls.py

    r5a86f8c rbcf369a  
    2020    url(r'^participacion-busqueda/(?P<pk>\d+)$', ParticipacionSearch.as_view(), name = "participacion_busqueda"),
    2121    url(r'^participacion/(?P<pk>\d+)/(?P<id_objetivo>\d+)$', ParticipacionCreate.as_view(), name = "participacion_consulta"),
     22    url(r'^participacion_simple/(?P<pk>\d+)$', ParticipacionSimpleCreate.as_view(), name = "participacion_simple"),
    2223]
    2324
  • participacion/views.py

    r8edb1df rbcf369a  
    5151        """
    5252        consulta = self.request.POST['consultas']
    53         return reverse_lazy('participacion_busqueda',
     53        if(consulta!="3"):
     54            return reverse_lazy('participacion_busqueda',
    5455                            kwargs={'pk': consulta})
     56        else:
     57            return reverse_lazy('participacion_simple', kwargs={'pk': consulta})
    5558
    5659
     
    127130                    campo += '</textarea></div>'
    128131            else:
    129                 campo = '<textarea class="form-control" name="consulta_respuesta_abierta_'+str(pregunta.id)+'"></textarea>'
     132                campo += '<label class="text-center text-danger">La propuesta debe tener entre 700 y 5000 caracteres</label><br>'
     133                campo += '<label class="pull-right" id="longitud"><span>0</span> caracteres escritos</label>'
     134                campo += '<textarea class="form-control" name="consulta_respuesta_abierta_'+str(pregunta.id)+'" oninput="medir_caracters(this);"></textarea>'
    130135            valores[pregunta.id] = {'label':label,'field':campo}
    131136            kwargs['preguntas'] = valores
     
    185190        respuesta = RespuestaSino()
    186191        respuesta.pregunta = parent
    187         respuesta.objetivo = id_objetivo
    188192        respuesta.respuesta = value
    189193        respuesta.user = user
     
    207211        respuesta = RespuestaOpciones()
    208212        respuesta.opcion = parent
    209         respuesta.objetivo = id_objetivo
    210213        respuesta.user = user
    211214        respuesta.save()
     
    252255    consulta = request.GET.get('consulta', None)
    253256    if(objetivo and consulta):
    254         respuesta_sino = RespuestaSino.objects.filter(pregunta__consulta=consulta,objetivo=objetivo)
     257        respuesta_sino = RespuestaSino.objects.filter(pregunta__consulta=consulta)
    255258        respuesta_abierta = RespuestaAbierta.objects.filter(pregunta__consulta=consulta,objetivo=objetivo)
    256         respuesta_opciones = RespuestaOpciones.objects.filter(opcion__pregunta__consulta=consulta,objetivo=objetivo)
     259        respuesta_opciones = RespuestaOpciones.objects.filter(opcion__pregunta__consulta=consulta)
    257260        if(respuesta_sino or respuesta_abierta or respuesta_opciones):
    258261            return JsonResponse({'mensaje': True,'participacion':True})
     
    260263    else:
    261264        return JsonResponse({'mensaje': False, 'error': str('No envío el ente y/o el id de la consulta')})
     265   
     266   
     267   
     268class ParticipacionSimpleCreate(GroupRequiredMixin,LoginRequiredMixin,TemplateView):
     269    """!
     270    Clase que gestiona la vista principal de la participación simple
     271
     272    @author Rodrigo Boet (rboet at cenditel.gob.ve)
     273    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     274    @date 18-07-2017
     275    @version 1.0.0
     276    """
     277    template_name = "participacion.create.simple.html"
     278    group_required = u"Participante"
     279   
     280    def get_context_data(self, **kwargs):
     281        """!
     282        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
     283   
     284        @author Rodrigo Boet (rboet at cenditel.gob.ve)
     285        @copyright GNU/GPLv2
     286        @date 23-02-2017
     287        @param self <b>{object}</b> Objeto que instancia la clase
     288        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
     289        @return Retorna los datos de contexto
     290        """
     291        valores = {}
     292        for pregunta in Pregunta.objects.filter(consulta_id=kwargs['pk']).all():
     293            label = '<label class="text-center">'+pregunta.texto_pregunta+'</label>'
     294            campo = ''
     295            if pregunta.tipo_pregunta.id == 1:
     296                campo = ''
     297                for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all():
     298                    campo += '<label for="'+kwargs['pk']+'">'+opcion.texto_opcion+'</label><input type="radio" name="consulta_respuesta_radio_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="'+str(opcion.id)+'" class="icheck">'
     299            elif pregunta.tipo_pregunta.id == 2:
     300                campo = ''
     301                for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all():
     302                    campo += '<label for="'+kwargs['pk']+'">'+opcion.texto_opcion+'</label><input type="checkbox" name="consulta_respuesta_check_'+kwargs['pk']+'" id="'+kwargs['pk']+'"value="'+str(opcion.id)+'" class="icheck">'
     303            elif pregunta.tipo_pregunta.id > 2 and pregunta.tipo_pregunta.id < 5:
     304                if(pregunta.tipo_pregunta.id == 3):
     305                    campo += '<label for="'+kwargs['pk']+'">Si</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="Si" class="icheck">'
     306                    campo += '<label for="'+kwargs['pk']+'">No</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="No" class="icheck">'
     307                else:
     308                    campo += '<label for="'+kwargs['pk']+'">Si</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="Si" class="icheck need_justification">'
     309                    campo += '<label for="'+kwargs['pk']+'">No</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="No" class="icheck">'
     310                    campo += '<div id="div_justificar_'+kwargs['pk']+'" style="display:none;"><label>Indique con que instrumento legal en vigencia se relaciona su aporte</label>'
     311                    campo += '<textarea class="form-control" id="respuesta_justificar_'+kwargs['pk']+'" name="consulta_respuesta_justificar_'+str(pregunta.id)+'">'
     312                    campo += '</textarea></div>'
     313            valores[pregunta.id] = {'label':label,'field':campo}
     314            kwargs['preguntas'] = valores
     315        return super(ParticipacionSimpleCreate, self).get_context_data(**kwargs)
     316   
     317    def post(self,request,pk,id_objetivo):
     318        """!
     319        Metodo que sobreescribe el post del formulario
     320   
     321        @author Rodrigo Boet (rboet at cenditel.gob.ve)
     322        @copyright GNU/GPLv2
     323        @date 20-03-2017
     324        @param self <b>{object}</b> Objeto que instancia la clase
     325        @param request <b>{object}</b> Objeto que instancia la petición
     326        @param pk <b>{int}</b> Recibe el id de la consulta
     327        @param id_ente <b>{int}</b> Recibe el id del ente
     328        @return Retorna los datos de contexto
     329        """
     330        data = dict(request.POST)
     331        del data['csrfmiddlewaretoken']
     332        if self.request.is_ajax():
     333            for key in data.keys():
     334                parent_id = key.split("_")[-1]
     335                if 'sino' in key:
     336                    value = True if data[key][0] == 'Si' else False
     337                    justify_id = 'consulta_respuesta_justificar_'+str(parent_id)
     338                    self.crear_respuesta_sino(parent_id,value,id_objetivo,self.request.user.id)
     339                    if(not value and justify_id in data.keys()):
     340                        respuesta = data[justify_id][0]
     341                        self.crear_respuesta_abierta(parent_id,respuesta,id_objetivo,self.request.user.id,True)
     342                elif 'radio' in key or 'check' in key:
     343                    for value in data[key]:
     344                        self.crear_respuesta_opciones(value,id_objetivo,self.request.user.id)
     345            return JsonResponse({"code":True})
     346        return redirect(reverse_lazy('participacion_busqueda',kwargs={'pk':pk}))
     347   
     348    def crear_respuesta_sino(self,parent_id,value,id_objetivo,user_id):
     349        """!
     350        Metodo para crear una respuesta de si/no
     351   
     352        @author Rodrigo Boet (rboet at cenditel.gob.ve)
     353        @copyright GNU/GPLv2
     354        @date 27-03-2017
     355        @param self <b>{object}</b> Objeto que instancia la clase
     356        @param parent_id <b>{int}</b> Recibe el número del id del padre
     357        @param value <b>{bool}</b> Recibe el valor de la respuesta
     358        @param id_objetivo <b>{int}</b> Recibe el id del objetivo
     359        @param user_id <b>{int}</b> Recibe el id del user
     360        @return Retorna los datos de contexto
     361        """
     362        user = User.objects.get(id=user_id)
     363        parent = Pregunta.objects.get(pk=parent_id)
     364        respuesta = RespuestaSino()
     365        respuesta.pregunta = parent
     366        respuesta.respuesta = value
     367        respuesta.user = user
     368        respuesta.save()
     369       
     370    def crear_respuesta_opciones(self,parent_id,id_objetivo,user_id):
     371        """!
     372        Metodo para crear una respuesta de selección simple y múltiple
     373   
     374        @author Rodrigo Boet (rboet at cenditel.gob.ve)
     375        @copyright GNU/GPLv2
     376        @date 28-03-2017
     377        @param self <b>{object}</b> Objeto que instancia la clase
     378        @param parent_id <b>{int}</b> Recibe el número del id del padre
     379        @param id_objetivo <b>{int}</b> Recibe el id del objetivo
     380        @param user_id <b>{int}</b> Recibe el id del user
     381        @return Retorna los datos de contexto
     382        """
     383        user = User.objects.get(id=user_id)
     384        parent = Opcion.objects.get(pk=parent_id)
     385        respuesta = RespuestaOpciones()
     386        respuesta.opcion = parent
     387        respuesta.user = user
     388        respuesta.save()
  • static/js/funciones.js

    r38855e2 rbcf369a  
    497497    $('.btn-primary').attr('disabled',true);
    498498    var form = $("#encuesta_form");
    499     var routes = $(location).attr('pathname').split('/')
    500     var pk = routes[routes.length-2]
    501     var obj = routes[routes.length-1]
     499    var routes = $(location).attr('pathname').split('/');
     500    if (routes.length==4) {
     501        var pk = routes[routes.length-2];
     502        var obj = routes[routes.length-1];
     503    }
     504    else{
     505        var pk = routes[routes.length-1];
     506        var obj = pk;
     507    }
    502508    var participacion;
    503509    $.get('/participacion/ajax/validar-participacion?consulta='+pk+'&objetivo='+obj)
     
    506512            participacion = response.participacion
    507513            if (participacion) {
    508                 bootbox.alert("Ya participó por este objetivo para esta consulta <br>Será direccionado en 4 segundos");
     514                bootbox.alert("Ya participó para esta consulta <br>Será direccionado en 4 segundos");
    509515                setTimeout(function(){
    510                     $(location).attr('href', $(location).attr('origin')+'/participacion-busqueda/'+pk)   
     516                    $(location).attr('href', $(location).attr('origin')+'/participacion')   
    511517                },4000);
    512518            }
     
    521527                            bootbox.alert("Se registró su participación con éxito <br>Será direccionado en 4 segundos");
    522528                            setTimeout(function(){
    523                                 $(location).attr('href', $(location).attr('origin')+'/participacion-busqueda/'+pk)   
     529                                $(location).attr('href', $(location).attr('origin')+'/participacion')   
    524530                            },4000);
    525531                        }
     
    868874    habilitar(valor,'CO','id_colectivo','readonly');
    869875}
     876
     877function medir_caracters(obj) {
     878    var span = $(obj).parent().find('#longitud span');
     879    span.text($(obj).val().length);
     880}
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.