Beispiel #1
0
def createProject(request):
    """
    *Vista para la creación de proyectos en el sistema.
    Opción válida para usuarios con rol de ``Administrador``.*

    :param request: HttpRequest necesario para crear proyectos, es la solicitud de la acción.
    :param args: Argumentos para el modelo ``Proyecto``.
    :param kwargs: Keyword Arguments para la el modelo ``Proyecto``.
    :return: Proporciona la pagina ``createproject.html`` con el formulario correspondiente
             Crea el proyecto en el sistema regresando al menu principal
    """

    admin = request.user
    mensajes = []

    if request.method == 'POST':
        form = NewProjectForm(request.POST)
        form.fields["lider_proyecto"].queryset = Usuario.objects.exclude(pk__in=(admin.id, -1), is_active=True)
        if form.is_valid():
            form.save()
            proyectoNuevo = Proyecto.objects.get(nombre=form["nombre"].value())

            # logger.info('El usuario ' + request.user.username + ' ha creado el proyecto: ' +
            #             form["nombre"].value() + ' dentro del sistema')

            vincularLider(proyectoNuevo, form["lider_proyecto"].value())

            # Crea el rol Comite de cambios y asigna al Lider a este grupo.
            grupoComite = Group(name="ComiteDeCambios-"+str(proyectoNuevo.id))
            grupoComite.save()
            rolComite = Rol(grupo=grupoComite, proyecto=proyectoNuevo)
            rolComite.save()

            grupoComite.user_set.add(proyectoNuevo.lider_proyecto)

            error = 0
            mensaje = 'Proyecto: ' + proyectoNuevo.nombre + '. Creado con exito. Configuracion inicial aplicada.'
            mensajes.append(mensaje)
            request.session['messages'] = mensajes
            request.session['error'] = error

            return HttpResponseRedirect('/projectlist/')
    else:
        form = NewProjectForm()
        form.fields["lider_proyecto"].queryset = Usuario.objects.exclude(pk__in=(admin.id, -1), is_active=True)
    return render(request, 'proyecto/createproject.html', {'user': request.user, 'form': form},)
Beispiel #2
0
def crearRol(request, id_proyecto):
    """
    *Vista para la creacion de roles en un proyecto.*
    *Permite asignar el ``Rol`` a usuarios vinculados al proyecto*
    *Un ``Rol`` es un conjunto de permisos que son válidos sobre una fase, un ``permiso``*
    *asigna privilegios específicos sobre una ``fase`` dada.*

    :param request: HttpRequest
    :param idProyecto: Clave única del proyecto donde se está creando el ``Rol``.
    :return: Proporciona la pagina createrole.html con los formularios correspondientes: ``NuevoRol`` y ``NuevoRolPermiso``
    """

    proyecto = Proyecto.objects.get(pk=id_proyecto)
    fases = Fase.objects.filter(proyecto=proyecto)

    if request.method == 'POST':
        # Se crea el formulario para crear el rol con los datos del POST
        rolGrupoForm = NuevoRolForm(request.POST)

        # Verifica que el grupo del rol tenga los datos correctos
        if rolGrupoForm.is_valid():
            rolGrupo = rolGrupoForm.save(commit=False)

            # Se crean los formularios para otorgarle al rol los permisos sobre los objetos especificos, proyecto o fases
            grupoPermisosForm = RoleObjectPermissionsForm(rolGrupo, proyecto, request.POST, field_name='permisosProyecto')
            fasesForms = []
            for fase in fases:
                faseForm = RoleObjectPermissionsForm(rolGrupo, fase, request.POST, field_name='permisosFases'+str(fase.id))
                fasesForms.append(faseForm)

            # Se crea el formulario que contiene los usuarios asignados al rol
            asignarUsuariosForm = asignarUsuariosRolForm(request.POST, id_proyecto=id_proyecto)

            # Verifica que los datos de los permisos y los usuarios asociados al rol sean correctos
            if grupoPermisosForm.is_valid() and asignarUsuariosForm.is_valid() and not encontrarFormInvalidas(fasesForms):
                # Guarda el rol en la base de datos
                rolGrupo.save()

                # Asocia los permisos sobre el proyecto y las fases al grupo del rol
                grupoPermisosForm.save_obj_perms()
                for faseForm in fasesForms:
                    faseForm.save_obj_perms()

                # Asigna los usuarios al grupo del rol
                usuariosRol = asignarUsuariosForm.get_cleaned_data()
                for usuario in usuariosRol:
                    usuarioNuevo = Usuario.objects.get(id=usuario)
                    rolGrupo.user_set.add(usuarioNuevo)

                rol = Rol(grupo=rolGrupo, proyecto=proyecto)
                rol.save()

                messages = []
                messages.append('Rol: '+ rol.grupo.name + ', creado con exito.')
                request.session['messages'] = messages
                request.session['error'] = 0
                return HttpResponseRedirect(reverse('administrarProyectos.views.workProject',
                                                    kwargs={'id_proyecto': id_proyecto}))

    # Formulario para crear un nuevo rol. Definicion de rol en models de esta app.
    rolGrupoForm = NuevoRolForm()

    # Crea un grupo temporal para generar los formularios iniciales
    rolGrupo = Group()

    # Formularios para asignar permisos a un rol sobre un objeto especifico.
    # Primer argumento: rol
    # Segundo argumento: objeto especifico
    grupoPermisosForm = RoleObjectPermissionsForm(rolGrupo, proyecto, field_name='permisosProyecto',
                                                  field_label='', attrs={'class': 'form-control proyecto'})
    fasesPermisosForms = []
    for fase in fases:
        faseForm = RoleObjectPermissionsForm(rolGrupo, fase, field_name='permisosFases'+str(fase.id),
                                             field_label='', attrs={'class': 'form-control fase'})
        fasesPermisosForms.append(faseForm)

    # Formulario para asignar usuarios al rol
    # asignarUsuariosForm = asignarUsuariosRolForm(proyecto, initial={'usuarios': [2, ]})
    asignarUsuariosForm = asignarUsuariosRolForm(id_proyecto=id_proyecto)

    return render(request, "rol/createrole.html", {'proyecto': proyecto, 'user': request.user, 'rolGrupoForm': rolGrupoForm,
                                                   'grupoPermisosForm': grupoPermisosForm, 'fasesPermisosForms': fasesPermisosForms,
                                                   'asignarUsuariosForm': asignarUsuariosForm, })