def crearPlantilla(request):

    try:
        with transaction.atomic():
            user = usuarioAutenticado(request)
            descripcion = request.POST.get('descripcion')

            plantilla = PlantillaEquipo(descripcion=descripcion, userid=user.userid)
            plantilla.full_clean()
            plantilla.save()

            response = {
                'code': 201,
                'data': model_to_dict(plantilla),
                'status': 'success'
            }

    except ValidationError as e:

        response = {
            'code': 400,
            'errors': dict(e),
            'status': 'success'
        }


    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 2
0
def crearEquipo(request):

    try:
        with transaction.atomic():
            user = usuarioAutenticado(request)
            person = models.Person.objects.get(user__userid=user.userid)

            plantilla = models.Team(
                team_name=request.POST.get('team_name'),
                team_leader=person,
                team_description=request.POST.get('team_description'))

            plantilla.full_clean()
            plantilla.save()

            response = {
                'code': 201,
                'data': model_to_dict(plantilla),
                'status': 'success'
            }

    except ValidationError as e:

        response = {'code': 400, 'errors': dict(e), 'status': 'success'}

    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 3
0
def getPersonNotifications(request):

    user = usuarioAutenticado(request)
    person = models.Person.objects.get(user__userid__exact=user.userid)

    notifications = models.Notification.objects.filter(
        person__pers_id__exact=person.pers_id).order_by('-notification_date')
    notifications = list(notifications.values())
    response = {'code': 200, 'data': notifications, 'status': 'success'}

    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 4
0
def logout(request):
    try:
        user = usuarioAutenticado(request)
        device = FCMDevice.objects.filter(user_id__exact=user.userid).first()
        if device is not None:
            device = FCMDevice.objects.get(user_id__exact=user.userid)
            device.registration_id = ''
            device.save()
            data = {'code': 200, 'status': 'success'}
            return JsonResponse(data, status=data['code'], safe=False)
    except Error as e:
        data = {'code': 500, 'errors': str(e), 'status': 'error'}
        return JsonResponse(data, status=data['code'], safe=False)
Esempio n. 5
0
def almacenarSurvery(request):
    KOBO_INSTR = 1
    tareaid = request.POST.get('tareaid')
    try:
        with transaction.atomic():
            tarea = models.Task.objects.get(pk=tareaid)

            #instrumento = models.Instrument.objects.get(pk=tarea.instrument.instrument_id)
            instrumento = tarea.instrument

            if instrumento.instrument_type == KOBO_INSTR:

                informacion = informacionFormularioKoboToolbox(
                    instrumento.external_id)

                if (isinstance(informacion, dict)):
                    user = usuarioAutenticado(request)
                    person = models.Person.objects.get(
                        user__userid__exact=user.userid)

                    #encuestaview.almacenarEncuestas(
                    #    instrumento, informacion['info'], person, tarea)
                    index_info = len(informacion['info'])
                    info = informacion['info'][index_info - 1]
                    encuesta = models.Survery(
                        instrument=instrumento,
                        koboid=info['_uuid'],
                        survery_content=json.dumps(info),
                        survery_observation='Ehhg',
                        #userid=userid, (person)
                        person=person,
                        task=tarea)
                    encuesta.full_clean()
                    encuesta.save()
                    data = {'code': 201, 'status': 'success'}
        utilidades.puntajeTarea(tareaid)
        utilidades.puntajeProyecto(tarea.project.proj_id)
        utilidades.puntajePersona(person.pers_id)
        equipos = utilidades.equiposDePersona(person.pers_id)
        for equipo in list(equipos):
            utilidades.puntajeEquipo(equipo['team_id'])

    except ObjectDoesNotExist:

        data = {'code': 404, 'status': 'error'}

    except ValidationError:

        data = {'code': 400, 'status': 'error'}

    return JsonResponse(data, status=data['code'], safe=False)
Esempio n. 6
0
def deletePersonNotifications(request):
    with transaction.atomic():

        user = usuarioAutenticado(request)
        person = models.Person.objects.get(user__userid__exact=user.userid)
        query = "DELETE FROM opx.notification \
	            WHERE opx.notification.person_id  = '" + str(
            person.pers_id) + "';"
        with connection.cursor() as cursor:
            cursor.execute(query)
            data = {
                'code': 200,
                'status': 'success',
                'notificaciones': [],
            }
        return JsonResponse(data, safe=False, status=data['code'])
Esempio n. 7
0
def almacenarDecision(request):
    userid = usuarioAutenticado(request).userid

    decision = models.Decision(
        decs_name = request.POST.get('decs_name'),
        decs_description = request.POST.get('decs_description')
    )

    try:
        with transaction.atomic():
            decision.full_clean()
            decision.save()
        
            data = serializers.serialize('python', [decision])
        return JsonResponse(data, safe = False, status = 201)

    except ValidationError as e:
        return JsonResponse(dict(e), safe = True, status = 400)
Esempio n. 8
0
def listadoEquipos(request):

    user = usuarioAutenticado(request)
    person = models.Person.objects.get(user__userid=user.userid)
    rol = str(person.role.role_id)

    if (rol == '8945979e-8ca5-481e-92a2-219dd42ae9fc'):
        query = "select equipo.*, persona.pers_name, persona.pers_lastname from opx.team as equipo inner join opx.person as persona on equipo.team_leader_id = persona.pers_id;"
        with connection.cursor() as cursor:
            cursor.execute(query)
            equipos = dictfetchall(cursor)

        for e in equipos:
            e['team_miembros'] = len(
                models.TeamPerson.objects.filter(
                    team__team_id__exact=e['team_id']))

        response = {'code': 200, 'data': list(equipos), 'status': 'success'}

    elif (rol == '628acd70-f86f-4449-af06-ab36144d9d6a'):
        EQUIPO_CIUDADANOS_ID = 'b4879f48-8ab1-4d79-8f5b-7585b75cfb07'
        query = "select equipo.*, persona.pers_name, persona.pers_lastname from opx.team as equipo  inner join opx.person as persona on equipo.team_leader_id = persona.pers_id where equipo.team_leader_id = '" + str(
            person.pers_id
        ) + "'" + " or equipo.team_id = '" + EQUIPO_CIUDADANOS_ID + "';"
        with connection.cursor() as cursor:
            cursor.execute(query)
            equipos = dictfetchall(cursor)

        for e in equipos:
            e['team_miembros'] = len(
                models.TeamPerson.objects.filter(
                    team__team_id__exact=e['team_id']))

        response = {'code': 200, 'data': list(equipos), 'status': 'success'}

    else:
        response = {
            'code': 403,
            'message': 'Usuario no permitido',
            'status': 'error'
        }
    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 9
0
def listadoPlantillas(request):

    user = usuarioAutenticado(request)
    rol = str(user.rolid)

    if (rol == '628acd70-f86f-4449-af06-ab36144d9d6a'
            or rol == '8945979e-8ca5-481e-92a2-219dd42ae9fc'):

        plantillas = PlantillaEquipo.objects.filter(
            userid__exact=user.userid).values()

        response = {'code': 200, 'data': list(plantillas), 'status': 'success'}

    else:
        response = {
            'code': 403,
            'message': 'Usuario no permitido',
            'status': 'error'
        }

    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 10
0
def crearComentario(request, projid):
    user = usuarioAutenticado(request)
    comentario = models.Comment(
        comment_title=request.POST.get('comment_title'),
        comment_description=request.POST.get('comment_description'),
        project=models.Project.objects.get(pk=projid))

    try:
        with transaction.atomic():
            comentario.full_clean()
            comentario.save()

        response = {
            'code': 201,
            'data': model_to_dict(comentario),
            'status': 'success'
        }

    except ValidationError as e:
        response = {'code': 400, 'errors': dict(e), 'status': 'success'}

    return JsonResponse(response, safe=False, status=response['code'])
Esempio n. 11
0
def almacenarContextualizacion(request):
    user = usuarioAutenticado(request)

    contextualizacion = models.Contextualization(
        conflict=models.Conflict.objects.get(
            pk=(request.POST.get('conflicto_id'))),
        city=models.City.objects.get(pk=(request.POST.get('ciudad_id'))),
        neighborhood=models.Neighborhood.objects.get(
            pk=(request.POST.get('barrio_id'))),
        person=models.Person.objects.get(user__userid=user.userid),
        title=request.POST.get('titulo'),
        description=request.POST.get('descripcion'))

    try:
        with transaction.atomic():
            contextualizacion.full_clean()
            contextualizacion.save()

            data = serializers.serialize('python', [contextualizacion])
        return JsonResponse(data, safe=False, status=201)

    except ValidationError as e:
        return JsonResponse(dict(e), safe=True, status=400)
Esempio n. 12
0
def AgregarElemento(request, tareid):

    try:
        tarea = models.Task.objects.get(pk=tareid)
        #instrumento = models.Instrument.objects.get(pk = tarea.instrument.instrument_id)
        instrumento = tarea.instrument
        if instrumento.instrument_type == 2:

            data = json.loads(request.body)
            osmelement = models.OsmElement.objects.get(pk=data['osmelement'])

            if osmelement.closed_way == 1:
                coordinates = data['coordinates']
            else:
                coordinates = data['coordinates']

            nodes = []
            changeset = agregarChangeset()
            nodeCount = 0

            # Armando XML
            root = Element('osmChange')
            root.set('version', '0.6')

            create = SubElement(root, 'create')

            # Creando Nodos

            for c in coordinates:
                nodeCount -= 1
                longitud = str(c['lng'])
                latitud = str(c['lat'])

                node = SubElement(create, 'node')
                node.set('id', str(nodeCount))
                node.set('lon', longitud)
                node.set('lat', latitud)
                node.set('version', "0")
                node.set('changeset', changeset)

                nodes.append(node)

            #Creando Way
            way = SubElement(create, 'way')
            way.set('id', '-1')
            way.set('changeset', changeset)

            #Especificando Nodos del way
            for node in nodes:
                nd = SubElement(way, 'nd')
                nd.set('ref', node.get('id'))

            if osmelement.closed_way == 1:
                nd = SubElement(way, 'nd')
                nd.set('ref', nodes[0].get('id'))

            #Etiqueta de Elemento tipo Way
            tag = SubElement(way, 'tag')
            tag.set('k', osmelement.osm_key)
            tag.set('v', osmelement.osm_value)

            # Obteniendo cadena XML a enviar a OSM
            xmlRequest = str(tostring(root), 'utf-8')

            #return HttpResponse(xmlRequest)

            #Almacendo Elemento en OSM
            client = http.client.HTTPSConnection(osmRestApiUrl)
            client.request('POST',
                           '/api/0.6/changeset/' + changeset + '/upload',
                           xmlRequest, osmHeaders())
            response = client.getresponse()

            if response.status == 200:

                # Cerrar Changeset OSM
                cerrarChangeset(changeset)

                xmlResponse = str(response.read(), 'utf-8')
                xmlObject = ET.fromstring(xmlResponse)
                wayElement = xmlObject.findall('way')[0]

                #Almacenando Cartografia
                user = usuarioAutenticado(request)
                person = models.Person.objects.get(
                    user__userid__exact=user.userid)
                cartografia = almacenarCartografia(instrumento,
                                                   wayElement.get('new_id'),
                                                   osmelement, person, tarea)

                response = {
                    'code': 200,
                    #'cartografia': cartografia,
                    'status': 'success'
                }

            else:
                xmlResponse = str(response.read(), 'utf-8')
                raise TypeError(
                    "Error al momento de crear el elemento en OSM: " +
                    xmlResponse)

        else:
            raise TypeError("El tipo de instrumento es inválido")

    except ObjectDoesNotExist as e:
        response = {'code': 404, 'message': str(e), 'status': 'error'}

    except ValidationError as e:
        response = {'code': 400, 'message': str(e), 'status': 'error'}

    except json.JSONDecodeError:
        response = {'code': 400, 'message': 'JSON inválido', 'status': 'error'}

    except IntegrityError as e:
        response = {'code': 400, 'message': str(e), 'status': 'error'}

    except TypeError as e:
        response = {'code': 400, 'message': str(e), 'status': 'error'}

    # except:
    #     response = {
    #         'code': 500,
    #         'status': 'error'
    #     }

    return JsonResponse(response, status=response['code'])
Esempio n. 13
0
def listadoProyectos(request):

    search = request.GET.get('search')
    page = request.GET.get('page')
    all = request.GET.get('all')

    try:

        if 'HTTP_AUTHORIZATION' in request.META.keys() and request.META['HTTP_AUTHORIZATION'] != 'null':

            # # Decodificando el access token
            # tokenBackend = TokenBackend(settings.SIMPLE_JWT['ALGORITHM'], settings.SIMPLE_JWT['SIGNING_KEY'],
            #                             settings.SIMPLE_JWT['VERIFYING_KEY'])
            # tokenDecoded = tokenBackend.decode(request.META['HTTP_AUTHORIZATION'].split()[1], verify=True)
            # #consultando el usuario
            # user = models.Usuario.objects.get(pk = tokenDecoded['user_id'])
            user = usuarioAutenticado(request)

            # ============================ Consultando proyectos ====================================

            #Consulta de proyectos para super administrador
            if str(user.rolid) == '8945979e-8ca5-481e-92a2-219dd42ae9fc':
                proyectos = models.Proyecto.objects.all()

            # Consulta de proyectos para proyectista
            elif str(user.rolid) == '628acd70-f86f-4449-af06-ab36144d9d6a':
                proyectos = models.Proyecto.objects.filter(proypropietario__exact = user.userid)

            # Consulta de proyectos para voluntarios o validadores
            elif str(user.rolid) == '0be58d4e-6735-481a-8740-739a73c3be86' or str(user.rolid) == '53ad3141-56bb-4ee2-adcf-5664ba03ad65':

                proyectosAsignados = models.Equipo.objects.filter(userid__exact = user.userid)
                proyectosAsignadosID = []

                for p in proyectosAsignados:
                    proyectosAsignadosID.append(p.proyid)

                proyectos = models.Proyecto.objects.filter(pk__in = proyectosAsignadosID)

            #Tipo de usuario distinto
            else:
                proyectos = models.Proyecto.objects.filter(proynombre = 'qwerty')

        # Usuario Invitado
        else:
            proyectos = models.Proyecto.objects.all()

        # ================= Busqueda de proyectos
        if search:
            proyectos = proyectos.filter(proynombre__icontains = search)

        # Especificando orden
        proyectos = proyectos.order_by('-proyfechacreacion')

        # convirtiendo a lista de diccionarios
        proyectos = list(proyectos.values())

        listadoProyectos = []
        for p in proyectos:

            #Consulta del proyectista
            p['proyectista'] = models.Usuario.objects.get(pk = p['proypropietario']).userfullname

            if 'user' in locals() and str(user.rolid) == '628acd70-f86f-4449-af06-ab36144d9d6a':

                p['dimensiones_territoriales'] = []
                dimensionesTerritoriales = models.DelimitacionGeografica.objects\
                                           .filter(proyid__exact = p['proyid'])\
                                           .filter(estado=1)\
                                           .values()

                dimensionesTerritoriales = list(dimensionesTerritoriales)

                for dim in dimensionesTerritoriales:
                    tareas = list(models.Tarea.objects.filter(dimensionid__exact=dim['dimensionid'])\
                                                      .filter(proyid = p['proyid'])\
                                                      .values())

                    dim['tareas'] = tareas

                    p['dimensiones_territoriales'].append(dim)

            # Reportes
            p['reportes'] = reporteEstadoProyecto(p['proyid'])

            listadoProyectos.append(p)

        if all is not None and all == "1":

            data = {
                'code': 200,
                'proyectos': listadoProyectos,
                'status': 'success'
            }

        else:

            # Paginación
            paginator = Paginator(listadoProyectos, 10)

            # Validación de página
            if page is None:
                page = 1

            #Petición de página
            proyectos = paginator.page(page).object_list

            data = {
                'code': 200,
                'paginator': {
                    'currentPage': int(page),
                    'perPage': paginator.per_page,
                    'lastPage': paginator.num_pages,
                    'total': paginator.count
                },
                'proyectos': proyectos,
                'status': 'success',
            }

    except EmptyPage:

        data = {
            'code': 404,
            'message': 'Página inexistente',
            'status': 'error'
        }

    except IndexError:
        data = {
            'code': 400,
            'status': 'error'
        }

    except TokenBackendError as e:
        data = {
            'code': 400,
            'message': str(e),
            'status': 'error'
        }

    return JsonResponse(data, safe = False, status = data['code'])
Esempio n. 14
0
def listadoProyectos(request):
    search = request.GET.get('search')
    page = request.GET.get('page')
    all = request.GET.get('all')

    try:
        if 'HTTP_AUTHORIZATION' in request.META.keys(
        ) and request.META['HTTP_AUTHORIZATION'] != 'null':

            # # Decodificando el access token
            # tokenBackend = TokenBackend(settings.SIMPLE_JWT['ALGORITHM'], settings.SIMPLE_JWT['SIGNING_KEY'],
            #                             settings.SIMPLE_JWT['VERIFYING_KEY'])
            # tokenDecoded = tokenBackend.decode(request.META['HTTP_AUTHORIZATION'].split()[1], verify=True)
            # #consultando el usuario
            # user = models.Usuario.objects.get(pk = tokenDecoded['user_id'])
            user = usuarioAutenticado(request)

            # ============================ Consultando proyectos ====================================

            #Consulta de proyectos para super administrador
            person = models.Person.objects.get(user__userid=user.userid)

            if str(person.role.role_id) == ROL_SUPER_ADMIN:
                proyectos = models.Project.objects.all()
                # Especificando orden
                proyectos = proyectos.order_by('-proj_creation_date')
                # convirtiendo a lista de diccionarios
                proyectos = list(proyectos.values())

            # Consulta de proyectos para proyectista
            elif str(person.role.role_id) == ROL_PROYECTISTA:
                proyectos = models.Project.objects.filter(
                    proj_owner__pers_id__exact=person.pers_id)
                # Especificando orden
                proyectos = proyectos.order_by('-proj_creation_date')
                # convirtiendo a lista de diccionarios
                proyectos = list(proyectos.values())

            # Consulta de proyectos para voluntarios o validadores
            elif str(person.role.role_id) == ROL_VOLUNTARIO or str(
                    person.role.role_id) == ROL_VALIDADOR:

                #consultar los proyectos a los que está asociado el voluntario o validador
                query = "select distinct pj.* from opx.team_person as tp inner join opx.project_team as pt on pt.team_id = tp.team_id inner join opx.project as pj on pt.project_id = pj.proj_id where tp.person_id = '" + str(
                    person.pers_id) + "' order by pj.proj_creation_date DESC;"

                with connection.cursor() as cursor:
                    cursor.execute(query)
                    PJ = dictfetchall(cursor)
                    proyectos = list(PJ)

            #Tipo de usuario distinto
            else:
                proyectos = models.Project.objects.filter(proj_name='qwerty')

        # Usuario Invitado
        else:
            proyectos = models.Project.objects.all()

        # ================= Busqueda de proyectos
        if search:
            proyectos = models.Project.objects.filter(
                proj_name__icontains=search)
            proyectos = list(proyectos.values())

        listadoProyectos = []
        type(proyectos)
        for p in proyectos:
            type(p)
            #Consulta del proyectista
            name = p['proj_external_id']
            #proj_owner_id = p['proj_owner_id']
            persona = models.Person.objects.get(pk=p['proj_owner_id'])
            p['proyectista'] = persona.pers_name + ' ' + persona.pers_lastname

            if 'user' in locals() and (
                    str(person.role.role_id) == ROL_PROYECTISTA
                    or str(person.role.role_id) == ROL_SUPER_ADMIN):

                p['dimensiones_territoriales'] = []

                query = "select dim.* from opx.territorial_dimension as dim inner join opx.project_dimension as pd on pd.territorial_dimension_id = dim.dimension_id where pd.project_id = '" + str(
                    p['proj_id']) + "';"

                with connection.cursor() as cursor:
                    cursor.execute(query)
                    territorios = dictfetchall(cursor)
                    p['dimensiones_territoriales'] = list(territorios)

                query1 = "select tarea.*, dim.* from opx.task as tarea \
                        inner join opx.territorial_dimension as dim on dim.dimension_id = tarea.territorial_dimension_id \
                        where tarea.project_id = '" + str(p['proj_id']) + "';"
                with connection.cursor() as cursor:
                    cursor.execute(query1)
                    tareas = dictfetchall(cursor)
                    p['tareas'] = list(tareas)

            #Reportes
            p['reportes'] = reporteEstadoProyecto(str(p['proj_id']))

            listadoProyectos.append(p)

        if all is not None and all == "1":

            data = {
                'code': 200,
                'proyectos': listadoProyectos,
                'status': 'success'
            }

        else:

            # Paginación
            paginator = Paginator(listadoProyectos, 10)

            # Validación de página
            if page is None:
                page = 1

            #Petición de página
            proyectos = paginator.page(page).object_list

            data = {
                'code': 200,
                'paginator': {
                    'currentPage': int(page),
                    'perPage': paginator.per_page,
                    'lastPage': paginator.num_pages,
                    'total': paginator.count
                },
                'proyectos': proyectos,
                'status': 'success',
            }

    except EmptyPage:

        data = {
            'code': 404,
            'message': 'Página inexistente',
            'status': 'error'
        }

    except IndexError:
        data = {'code': 400, 'status': 'error'}

    except TokenBackendError as e:
        data = {'code': 400, 'message': str(e), 'status': 'error'}

    return JsonResponse(data, safe=False, status=data['code'])
Esempio n. 15
0
def almacenamientoProyecto(request):
    user = usuarioAutenticado(request)
    person = models.Person.objects.get(user__userid=user.userid)
    # Decodificando el access token
    tokenBackend = TokenBackend(settings.SIMPLE_JWT['ALGORITHM'],
                                settings.SIMPLE_JWT['SIGNING_KEY'],
                                settings.SIMPLE_JWT['VERIFYING_KEY'])
    tokenDecoded = tokenBackend.decode(
        request.META['HTTP_AUTHORIZATION'].split()[1], verify=True)
    delimintacionBarrio = request.POST.get('dimensionesPre')
    decisiones = request.POST.get('decisiones')
    contextos = request.POST.get('contextos')
    equipos = request.POST.get('plantillas')
    delimitacionGeograficas = request.POST.get('delimitacionesGeograficas')
    tipoP = models.ProjectType.objects.get(
        projtype_id__exact=request.POST.get('tiproid'))

    try:
        with transaction.atomic():
            if ((delimitacionGeograficas != "[]") and (decisiones != "[]")
                    and (contextos != "[]") and (equipos != "[]")):
                proyecto = models.Project(
                    proj_name=request.POST.get('proynombre'),
                    proj_description=request.POST.get('proydescripcion'),
                    proj_external_id=12345,
                    proj_close_date=request.POST.get('proyfechacierre'),
                    proj_start_date=request.POST.get('proyfechainicio'),
                    proj_completness=0,
                    project_type=tipoP,
                    proj_owner=person)
                proyecto.full_clean()
                proyecto.save()

                delimintacionBarrio = json.loads(delimintacionBarrio)
                almacenarDelimitacionesPrecarga(proyecto, delimintacionBarrio)

                delimitacionGeograficas = json.loads(delimitacionGeograficas)
                almacenarDelimitacionesGeograficas(proyecto,
                                                   delimitacionGeograficas)

                decisiones = json.loads(decisiones)
                almacenarDecisionProyecto(proyecto, decisiones)

                contextos = json.loads(contextos)
                almacenarContextosProyecto(proyecto, contextos)

                equipos = json.loads(equipos)
                asignarEquipos(proyecto, equipos)

                data = serializers.serialize('python', [proyecto])[0]

                data = {'code': 201, 'proyecto': data, 'status': 'success'}
            else:
                raise ValidationError({'Información incompleta'})

    except ValidationError as e:
        try:
            errors = dict(e)
        except ValueError:
            errors = list(e)[0]

        data = {
            'code': 400,
            'errors': errors,
            'message': str(e),
            'status': 'error'
        }

    except IntegrityError as e:

        data = {'code': 500, 'message': str(e), 'status': 'success'}

    except ObjectDoesNotExist as e:
        data = {'code': 404, 'message': str(e), 'status': 'error'}

    return JsonResponse(data, safe=False, status=data['code'])
Esempio n. 16
0
def listadoTareas(request):

    try:

        # Obtener usuario autenticado
        usuario = usuarioAutenticado(request)

        # Superadministrador
        if str(usuario.rolid) == '8945979e-8ca5-481e-92a2-219dd42ae9fc':
            proyectosUsuario = []

        # Consulta de proyectos para un usuario proyectista
        elif str(usuario.rolid) == '628acd70-f86f-4449-af06-ab36144d9d6a':
            proyectosUsuario = list(
                models.Proyecto.objects.filter(
                    proypropietario=usuario.userid).values('proyid'))

        # Consulta de proyectos para un usuario voluntario o validador
        elif str(usuario.rolid
                 ) == '0be58d4e-6735-481a-8740-739a73c3be86' or str(
                     usuario.rolid) == '53ad3141-56bb-4ee2-adcf-5664ba03ad65':
            proyectosUsuario = list(
                models.Equipo.objects.filter(
                    userid=usuario.userid).values('proyid'))

        # ================ Obtener página validación de la misma ========================
        page = request.GET.get('page')

        if (page is None):
            page = 1

        all = request.GET.get('all')

        # Obtener Búsqueda y validación de la misma
        search = request.GET.get('search')

        query = "select t.*, i.instrnombre, p.proynombre from v1.tareas as t " \
                "inner join v1.proyectos as p on t.proyid = p.proyid " \
                "inner join v1.instrumentos  as i on t.instrid = i.instrid"

        if len(proyectosUsuario) > 0 or search is not None:

            query += " where "

            #   Busqueda de tareas por proyecto
            if len(proyectosUsuario) == 1:
                query += "t.proyid = '" + str(
                    proyectosUsuario[0]['proyid']) + "'"

            if len(proyectosUsuario) > 1:
                firstItemQuery = True
                for p in proyectosUsuario[:-1]:

                    if firstItemQuery:
                        query += "("
                        firstItemQuery = False

                    query += "t.proyid = '" + str(p['proyid']) + "' or "

                query += "t.proyid = '" + str(
                    proyectosUsuario[-1]['proyid']) + "')"

            # Busqueda por Nombre
            if search is not None:
                if len(proyectosUsuario) > 0:
                    query += " and"

                query += " (t.tarenombre ~* '" + search + "');"

        with connection.cursor() as cursor:
            cursor.execute(query)

            # formatear respuesta de base de datos
            tareas = dictfetchall(cursor)

            # Progreso de las Tareas
            for t in tareas:
                # Tipo encuesta
                if t['taretipo'] == 1:

                    encuestas = models.Encuesta.objects.filter(
                        tareid__exact=t['tareid'])
                    progreso = (len(encuestas) * 100) / t['tarerestriccant']
                    t['progreso'] = progreso

                    # instrumento = models.Instrumento.objects.get(pk=t['instrid'])
                    # detalleFormulario = detalleFormularioKoboToolbox(instrumento.instridexterno)
                    #
                    # if(detalleFormulario):
                    #     progreso = (detalleFormulario['deployment__submission_count'] * 100) / t['tarerestriccant']
                    #     t['progreso'] = progreso

            if all is not None and all == "1":

                data = {'code': 200, 'tareas': tareas, 'status': 'success'}

            else:

                # Obtener Página
                paginator = Paginator(tareas, 10)

                # Obtener lista de tareas
                tareas = paginator.page(page).object_list

                data = {
                    'code': 200,
                    'paginator': {
                        'currentPage': page,
                        'perPage': paginator.per_page,
                        'lastPage': paginator.num_pages,
                        'total': paginator.count
                    },
                    'tareas': tareas,
                    'status': 'success'
                }

    except EmptyPage:

        data = {
            'code': 400,
            'message': 'Página inexistente',
            'status': 'error'
        }

    return JsonResponse(data, safe=False, status=data['code'])
Esempio n. 17
0
def usuariosDisponiblesProyecto(request, proyid):

    try:

        proyecto = models.Proyecto.objects.get(pk = proyid)
        user = usuarioAutenticado(request)

        # Superadministrador o Proyectista
        if (str(user.rolid) == '628acd70-f86f-4449-af06-ab36144d9d6a' or str(user.rolid) == '8945979e-8ca5-481e-92a2-219dd42ae9fc'):

            # Busqueda de Usuarios
            search = request.GET.get('search')

            # query = "select u.userid, u.userfullname from v1.usuarios u where (u.rolid = '0be58d4e-6735-481a-8740-739a73c3be86' or u.rolid = '53ad3141-56bb-4ee2-adcf-5664ba03ad65') and u.userid not in (select e.userid from v1.equipos e where e.proyid = '" + proyid + "')"

            query = "select distinct on(u.userid) \
                    u.userid, u.userfullname \
                    from v1.miembros_plantilla as mp \
                    inner join v1.usuarios as u on u.userid = mp.userid \
                    inner join v1.plantillas_equipo as pe on pe.planid = mp.planid \
                    where pe.userid = '{}' \
                    and u.userid not in (select e.userid from v1.equipos e where e.proyid = '{}') \
                    and (u.rolid = '0be58d4e-6735-481a-8740-739a73c3be86' or u.rolid = '53ad3141-56bb-4ee2-adcf-5664ba03ad65')" \
                    .format(user.userid, proyid)

            if search is not None:
                query += "and u.userfullname ~* '" + search + "'"

            with connection.cursor() as cursor:
                cursor.execute(query)

                usuarios = dictfetchall(cursor)

            for u in usuarios:
                u['equipos'] = ''
                equiposUsuario = models.MiembroPlantilla.objects.filter(userid=u['userid'])

                for equs in equiposUsuario:
                    team = models.PlantillaEquipo.objects.get(pk=equs.planid)

                    if team.userid == user.userid:
                        u['equipos'] += str(team.descripcion) + ', '

            data = {
                'code': 200,
                'usuarios': usuarios,
                'status': 'success'
            }

        else:
            data = {
                'code': 403,
                'message': 'Usuario no permitido',
                'status': 'error'
            }

    except ObjectDoesNotExist:

        data = {
            'code': 404,
            'message': 'El proyecto no existe',
            'status': 'error'
        }

    except ValidationError as e:

        data = {
            'code': 400,
            'errors': tuple(e),
            'status': 'error'
        }

    return JsonResponse(data, safe = False, status = data['code'])
Esempio n. 18
0
def equipoProyecto(request, proyid):

    try:

        if proyid is None:

            data = {
                'code': 400,
                'equipo': 'El proyecto no fue especificado',
                'status': 'error'
            }

        else:

            #query = "select e.equid, u.userfullname, u.latitud, u.longitud, u.horaubicacion from v1.equipos as e inner join v1.usuarios as u on u.userid = e.userid where e.proyid = '" + proyid + "'"

            user = usuarioAutenticado(request)

            # Superadministrador o Proyectista
            if (str(user.rolid) == '628acd70-f86f-4449-af06-ab36144d9d6a' or str(user.rolid) == '8945979e-8ca5-481e-92a2-219dd42ae9fc'):

                query = "select distinct on(u.userid) \
                        u.userid, e.equid, u.userfullname, u.latitud, u.longitud, u.horaubicacion \
                        from v1.equipos as e \
                        inner join v1.usuarios as u on u.userid = e.userid \
                        and e.proyid = '{}'" \
                        .format(proyid)

                with connection.cursor() as cursor:
                    cursor.execute(query)

                    equipo = dictfetchall(cursor)

                for eq in equipo:
                    eq['equipos'] = ''
                    equiposUsuario = models.MiembroPlantilla.objects.filter(userid = eq['userid'])

                    for equs in equiposUsuario:
                        team =  models.PlantillaEquipo.objects.get(pk=equs.planid)

                        if team.userid == user.userid:
                            eq['equipos'] += str(team.descripcion) + ', '

                data = {
                    'code': 200,
                    'equipo': equipo,
                    'status': 'success'
                }

            else:
                data = {
                    'code': 403,
                    'message': 'Usuario no permitido',
                    'status': 'error'
                }

    except ValidationError as e:

        data = {
            'code': 400,
            'equipo': list(e),
            'status': 'success'
        }

    return JsonResponse(data, safe = False, status = data['code'])
Esempio n. 19
0
def listadoTareas(request):

    try:
        # Obtener usuario autenticado
        usuario = usuarioAutenticado(request)
        person = models.Person.objects.get(user__userid=usuario.userid)
        tareasUsuario = []
        proyectosUsuario = []
        n = ""
        # Superadministrador
        if str(person.role_id) == ROL_SUPER_ADMIN:
            tareasUsuario = []
            n = "select tk.* from opx.task as tk order by tk.task_creation_date DESC;"

        # Consulta de proyectos para un usuario proyectista
        elif str(person.role_id) == ROL_PROYECTISTA:
            n = "select tk.*, restric.* \
                from opx.person as persona  \
                inner join opx.project as proyecto on proyecto.proj_owner_id = persona.pers_id  \
                inner join opx.task as tk on tk.project_id = proyecto.proj_id \
                inner join opx.task_restriction as restric on tk.task_restriction_id = restric.restriction_id  \
                where persona.pers_id = '" + str(
                person.pers_id) + "' order by tk.task_creation_date DESC;"

        # Consulta de proyectos para un usuario voluntario o validador
        elif str(person.role_id) == ROL_VOLUNTARIO or str(
                person.pers_id) == ROL_VALIDADOR:
            n = "select distinct tk.*, restric.* \
                from opx.person as person \
                inner join opx.team_person as tp on person.pers_id = tp.person_id \
                inner join opx.project_team as pt on tp.team_id = pt.team_id \
                inner join opx.task as tk on tk.project_id = pt.project_id \
                inner join opx.task_restriction as restric on tk.task_restriction_id = restric.restriction_id \
                where person.pers_id = '" + str(
                person.pers_id) + "' order by tk.task_creation_date DESC;"

    # ================ Obtener página validación de la misma ========================
        page = request.GET.get('page')

        if (page is None):
            page = 1

        all = request.GET.get('all')

        with connection.cursor() as cursor:
            cursor.execute(n)

            # formatear respuesta de base de datos
            tareas = dictfetchall(cursor)

        # Progreso de las Tareas
        for t in tareas:
            t['task_type_name'] = (models.TaskType.objects.get(
                pk=t['task_type_id'])).task_type_name
            t['instrument_name'] = (models.Instrument.objects.get(
                pk=t['instrument_id'])).instrument_name
            t['proj_name'] = (models.Project.objects.get(
                pk=t['project_id'])).proj_name
            t['priority_name'] = (models.TaskPriority.objects.get(
                pk=t['task_priority_id'])).priority_name
            t['task_completness'] = t['task_completness'] * 100

        # Obtener Búsqueda y validación de la misma
        search = request.GET.get('search')

        if search is not None:
            tareas = models.Task.objects.filter(task_name__icontains=search)
            tareas = list(tareas.values())
        if all is not None and all == "1":
            data = {'code': 200, 'tareas': tareas, 'status': 'success'}
        else:
            # Obtener Página
            paginator = Paginator(tareas, 10)
            # Obtener lista de tareas
            tareas = paginator.page(page).object_list
            data = {
                'code': 200,
                'paginator': {
                    'currentPage': page,
                    'perPage': paginator.per_page,
                    'lastPage': paginator.num_pages,
                    'total': paginator.count
                },
                'tareas': tareas,
                'status': 'success'
            }  # Obtener Búsqueda y validación de la misma

    except EmptyPage:

        data = {
            'code': 400,
            'message': 'Página inexistente',
            'status': 'error'
        }

    return JsonResponse(data, safe=False, status=data['code'])