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},)
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, })