示例#1
0
def editProyecto(request, id_objeto):
    """
    Vista de acceso al usuario con rol de Catalogador, de esta manera se le permitirá modificar objetos
    """
    obj = Objeto.objects.get(pk=id_objeto)  # objeto que se está modificando
    pro = obj.proyecto
    kws = obj.palabras_claves.all()  # palabras claves del objeto
    if request.user.profile.rol == 'rcat':
        if obj.creador == request.user:
            error1 = False
            errores = False
            l_errores = []
            gruposu = request.user.groups.all()
            esp = obj.espec_lom
            l_autores = request.POST.getlist('autores1')
            autores = obj.autores.all()
            lista_autores = [
            ]  # lista para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar.
            lista_temporal = [
            ]  # lista temporal con los datos de los autores sin el caracter - para guardar los autores incluidos en el formulario, ya sea para añadir o eliminar.
            if request.method == 'POST':
                if not request.POST.getlist('autores1'):
                    l_errores.append('No incluyó autores al objeto.')
                    error1 = True
                if len(l_autores[0]) == 0:
                    l_errores.append('No incluyó autores al objeto.')
                    error1 = True
                if not request.POST.get('palabras_claves'):
                    l_errores.append('No incluyó palabras claves al objeto.')
                    error1 = True
                formularioEsp = EspecificacionForm(request.POST, instance=esp)
                formularioObj = cObjetosForm(request.user,
                                             obj,
                                             request.POST,
                                             request.FILES,
                                             instance=obj)
                formularioPro = ProyectoForm(request.POST, instance=pro)
                if not error1:
                    if formularioEsp.is_valid() & formularioObj.is_valid(
                    ) & formularioPro.is_valid():
                        formularioEsp.save()
                        pc = formularioObj.cleaned_data[
                            'palabras_claves']  # se toman las palabras claves digitadas
                        re = formularioObj.cleaned_data[
                            'repositorio']  # se toma el repositorio
                        pro = formularioPro.save(
                            commit=False)  # se guarda una instancia temporal
                        ti = formularioEsp.cleaned_data['lc1_titulo']
                        pro.titulo = ti  # se asocia el proyecto con su titulo
                        pro.save()
                        f = formularioObj.save(
                            commit=False)  # se guarda un instancia temporal
                        lpc = [
                            x.strip() for x in pc.split(' ')
                        ]  # se utilizan las palabras claves como una lista de palabras separadas sin espacios
                        for l in lpc:
                            p, b = PalabraClave.objects.get_or_create(
                                palabra_clave=l
                            )  # Se crea una palabra clave por cada palabra en la lista
                            if not b:  # Si ya existe la palabra entonces se obvia el proceso de crearla
                                p.save()  # se guarda la palabra clave en la bd
                            f.palabras_claves.add(
                                p)  # se añade cada palabra clave al objeto
                        for kw in kws:  # Se recorre todo el conjunto de palabras claves del objeto
                            if kw.palabra_clave not in lpc:  # se valida si cada palabra clave todavía se mantiene en lo que el usuario digitó
                                f.palabras_claves.remove(
                                    kw
                                )  # de no encontrarse la palabra clave debe desasociarse aunque no eliminarse.
                        for l in l_autores:  # como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto
                            lista_autores = l.split(
                                ','
                            )  # se divide la lista por comas que representa cada string de campos del autor
                            for st in lista_autores:  # se recorre cada autor
                                lista_temporal.append(st.replace('-', ' '))
                                s = st.split(
                                    ' '
                                )  # se divide los campos nombres, apellidos y rol en una lista
                                aut, cr = Autor.objects.get_or_create(
                                    nombres=s[0].replace('-', ' '),
                                    apellidos=s[1].replace('-', ' '),
                                    rol=s[2].replace('-', ' '))
                                if not cr:  # Si ya existe el autor entonces se obvia el proceso de crearlo
                                    aut.save()  # se guarda el autor en la bd
                                f.autores.add(
                                    aut
                                )  # se añade al campo manytomany con Autores.
                        for autor in autores:  # Se recorre todo el conjunto de autores del objeto
                            cadena_temporal = autor.nombres + ' ' + autor.apellidos + ' ' + autor.rol  # cadena que concatena los datos del autor para compararlos con la lista que el usuario digita
                            if cadena_temporal not in lista_temporal:  # se valida si cada autor todavía se mantiene en lo que el usuario digitó
                                f.autores.remove(
                                    autor
                                )  # de no encontrarse el autor, debe desasociarse aunque no eliminarse.
                        f.repositorio = re
                        f.proyecto = pro
                        f.save()
                        # messages.add_message(request, messages.SUCCESS, 'Cambios Actualizados Exitosamente')# no funciona al redireccionar
                        return HttpResponseRedirect('/proyecto/' + str(obj.pk))
                    else:
                        errores = True
            else:
                formularioEsp = EspecificacionForm(instance=esp)
                formularioObj = cObjetosForm(request.user, obj, instance=obj)
                formularioPro = ProyectoForm(instance=pro)
            return render_to_response('editProyecto.html', {
                'objeto': obj,
                'usuario': request.user,
                'formObj': formularioObj,
                'formEsp': formularioEsp,
                'formPro': formularioPro,
                'proyecto': obj.proyecto,
                'autores': autores,
                'errores': errores,
                'l_errores': l_errores
            },
                                      context_instance=RequestContext(request))
        else:
            return HttpResponseRedirect('/')
    else:
        return HttpResponseRedirect('/')
示例#2
0
def Proyecto(request):
    """
    Vista de acceso al usuario con rol de Catalogador, de esta manera se le permitirá crearProyectos
    """
    if request.user.profile.rol == 'rcat':
        proyectoObj = Objeto.objects.filter(proyecto__isnull=False)
        gruposu = request.user.groups.all()
        errores = False
        error1 = False
        l_errores = []
        if request.method == 'POST':
            if not request.POST.get('autores1'):
                l_errores.append('No incluyó autores al objeto.')
                error1 = True
            if not request.POST.get('palabras_claves'):
                l_errores.append('No incluyó palabras claves al objeto.')
                error1 = True
            if not request.POST.get('repositorio'):
                l_errores.append(
                    'No seleccionó repositorio. Si no hay repositorios asociados, consulte a un administrador del sistema para agregar alguno.'
                )
                error1 = True
            l_autores = request.POST.getlist('autores1')
            formularioEsp = EspecificacionForm(request.POST)
            formularioPro = ProyectoForm(request.POST)
            formularioObj = ObjetosForm(gruposu, request.POST, request.FILES)
            if not error1:
                if formularioEsp.is_valid():
                    if formularioObj.is_valid():  # si el válido el objeto
                        if formularioPro.is_valid(
                        ):  # si el válido el proyecto
                            esp = formularioEsp.save(
                            )  # se guarda la especificaciónLOM primero
                            pc = formularioObj.cleaned_data[
                                'palabras_claves']  # se toman las palabras claves digitadas
                            re = formularioObj.cleaned_data[
                                'repositorio']  # se toma el repositorio
                            pro = formularioPro.save(
                                commit=False
                            )  # se guarda una instancia temporal
                            ti = formularioEsp.cleaned_data['lc1_titulo']
                            pro.titulo = ti  # se asocia el proyecto con su titulo
                            pro.nota = Decimal('0.0')
                            pro.save()
                            f = formularioObj.save(
                                commit=False
                            )  # se guarda un instancia temporañ
                            f.espec_lom = esp  # se asocia el objeto con su especificaciónLOM
                            f.creador = request.user  # Se asocia el objeto con el usuario que lo crea
                            f.repositorio = re  # se asoicia el objeto con su repositorio
                            f.proyecto = pro  # se asocia el proyecto con el usuario que lo crea
                            f.save(
                            )  # se guarda el objeto en la base de datos.
                            if ',' in pc:  # si hay comas en las palabras claves
                                lpc = [
                                    x.strip() for x in pc.split(',')
                                ]  # se utilizan las palabras claves como una lista de palabras separadas sin comas ni espacios
                            else:
                                lpc = [
                                    x.strip() for x in pc.split(' ')
                                ]  # se utilizan las palabras claves como una lista de palabras separadas sin espacios
                            for l in lpc:
                                p, b = PalabraClave.objects.get_or_create(
                                    palabra_clave=l
                                )  # Se crea una palabra clave por cada palabra en la lista
                                if not b:  # Si ya existe la palabra entonces se obvia el proceso de crearla
                                    p.save(
                                    )  # se guarda la palabra clave en la bd
                                f.palabras_claves.add(
                                    p)  # se añade cada palabra clave al objeto
                            for l in l_autores:  # como el objeto llega como una lista... se debe recorrer per en realidad siempre tiene un solo objeto
                                stri = l.split(
                                    ','
                                )  # se divide la lista por comas que representa cada string de campos del autor
                                for st in stri:  # se recorre cada autor
                                    s = st.split(
                                        ' '
                                    )  # se divide los campos nombres, apellidos y rol en una lista
                                    aut, cr = Autor.objects.get_or_create(
                                        nombres=s[0].replace('-', ' '),
                                        apellidos=s[1].replace('-', ' '),
                                        rol=s[2].replace('-', ' '))
                                    if not cr:  # Si ya existe el autor entonces se obvia el proceso de crearlo
                                        aut.save(
                                        )  # se guarda el autor en la bd
                                    f.autores.add(
                                        aut
                                    )  # se añade al campo manytomany con Autores.
                            messages.add_message(
                                request, messages.SUCCESS,
                                'Objeto Agregado Exitosamente')
                            formularioObj = ObjetosForm(gruposu)
                            formularioEsp = EspecificacionForm()
                            formularioPro = ProyectoForm()
                        else:
                            errores = True
                    else:
                        errores = True
                else:
                    errores = True
        else:
            formularioObj = ObjetosForm(gruposu)
            formularioEsp = EspecificacionForm()
            formularioPro = ProyectoForm()

        return render_to_response('proyecto.html', {
            'usuario': request.user,
            'proyecto': proyectoObj,
            'formObj': formularioObj,
            'formPro': formularioPro,
            'formEsp': formularioEsp,
            'errores': errores,
            'l_errores': l_errores
        },
                                  context_instance=RequestContext(request))