def changeItem(request, id_item): """ *Vista para la modificacion de una fase dentro del sistema.* *Opción válida para usuarios con los roles correspondientes.* :param request: HttpRequest necesario para modificar la fase, es la solicitud de la acción. :param id_fase: Identificador de la fase dentro del sistema la cual se desea modificar. :param args: Argumentos para el modelo ``Fase``. :param kwargs: Keyword Arguments para la el modelo ``Fase``. :return: Proporciona la pagina ``changephase.html`` con el formulario correspondiente. Modifica la fase especifica y luego regresa al menu principal """ mensajes = [] items = ItemBase.objects.filter(pk=id_item) if items: print 'Inicio de Proceso de Modificacion' else: return item = ItemBase.objects.get(pk=id_item) tipoItem = item.tipoitem phase = tipoItem.fase project = phase.proyecto if request.method == 'POST': form = itemForm(request.POST, instance=item) form.fields['tipoitem'].queryset = TipoItem.objects.filter(fase=phase.id) if form.is_valid(): item = form.save(commit=False) item.fecha_modificacion = timezone.now() item.usuario_modificacion = request.user item.version = reversion.get_unique_for_object(item).__len__() + 1 item.save() message = 'Modificaciones concluidas con exito en el Item: ' + item.nombre error = 0 mensajes.append(message) request.session['messages'] = mensajes request.session['error'] = error return HttpResponseRedirect('/workphase/' + str(phase.id)) else: form = itemForm(instance=item) form.fields['tipoitem'].queryset = TipoItem.objects.filter(fase=phase.id) return render(request, 'item/changeitem.html', {'form': form, 'item': item, 'phase': phase, 'project': project, 'tiposItem': tipoItem, 'user': request.user}, )
def createItem(request, id_fase): """ *Vista para la creación de fases en el sistema. Opción válida para usuarios con los roles correspondientes.* :param request: HttpRequest necesario para crear fases dentro de los proyectos, es la solicitud de la acción. :param id_proyecto: Identificador del proyecto dentro del sistema al cual se le vincularán las fases creadas. :param args: Argumentos para el modelo ``Item``. :param kwargs: Keyword Arguments para la el modelo ``Item``. :return: Proporciona la pagina ``createphase.html`` con el formulario correspondiente. Crea la fase dentro del proyecto especificando y luego regresa al menu principal """ usuario = request.user fase = Fase.objects.get(pk=id_fase) proyecto = fase.proyecto if request.method == 'POST': form = itemForm(request.POST) form.fields['tipoitem'].queryset = TipoItem.objects.filter(fase=id_fase) if form.is_valid(): item = form.save(commit=False) item.fecha_modificacion = timezone.now() item.usuario = usuario item.usuario_modificacion = usuario item.save() crearAtributos(item.id) mensajes = [] mensajes.append('Item: ' + ItemBase.objects.last().nombre + ', creado exitosamente') request.session['messages'] = mensajes request.session['error'] = 0 return HttpResponseRedirect('/workphase/' + str(fase.id)) else: form = itemForm() form.fields['tipoitem'].queryset = TipoItem.objects.filter(fase=id_fase) return render(request, 'item/createitem.html', {'form': form, 'fase': fase, 'proyecto': proyecto, 'user': usuario}, )
def test_changeItem_response(self): """ *Test para la vista de modificacion de fases en el sistema.* """ print '\nInicio - Prueba: changeItem' login = self.client.login(username='******', password='******') self.assertTrue(login) project = Proyecto.objects.get(nombre='Proyecto01') fase = Fase.objects.get(nombre='Fase01') fase.proyecto = project fase.save() tipoItem = TipoItem.objects.get(nombre='TipoItem01') tipoItem.fase = fase tipoItem.save() dato_item_exito = { 'usuario': self.user, 'usuario_modificacion': self.user, 'nombre': 'Item01', 'descripcion': 'Esto es un Item de prueba', 'estado' : 'ACT', 'fecha_creacion': timezone.now(), 'fecha_modificacion': timezone.now(), 'tipoitem': tipoItem.id, 'complejidad': 10, 'costo': 10, 'tiempo': 10, 'version': 1, 'linea_base': '', } form = itemForm(dato_item_exito) if form.is_valid(): item = form.save(commit=False) item.usuario = self.user item.usuario_modificacion = self.user item.save() else: print 'Error en los datos del formulario' item = ItemBase.objects.get(nombre='Item01') print 'Prueba de Exitosa' dato_item_mod = { 'usuario': self.user, 'usuario_modificacion': self.user, 'nombre': 'Item01_Modificado', 'descripcion': 'Esto es un Item de prueba', 'estado' : 'ACT', 'fecha_creacion': timezone.now(), 'fecha_modificacion': timezone.now(), 'tipoitem': tipoItem.id, 'complejidad': 10, 'costo': 10, 'tiempo': 10, 'version': 1, 'linea_base': '', } request = self.factory.post('/changeitem/', dato_item_mod) request.user = self.user request.session = {} response = changeItem(request, item.id) if response == None: print 'Error Previsto: La item especificado no existe\nPor favor verifique los datos ingresados' else: self.assertEqual(response.status_code, 302, 'Error al modificar el Item') print '\nItem modificado exitosamente' print ItemBase.objects.all() print 'Fin - Prueba: changeItem\n' print 'Inicio - Prueba: changeItem(ERROR PREVISTO)' id_item = 3 response = changeItem(request, id_item) if response == None: print 'Error Previsto: El código de item ' + str(id_item) + ' especificado no existe\nPor favor verifique los datos ingresados' print 'Fin - Prueba: changePhase(ERROR PREVISTO)\n'
def test_createItem_response(self): """ *Test para la vista de creacion de proyectos en el sistema* """ print '\nInicio - Prueba: Creacion de Item' login = self.client.login(username='******', password='******') self.assertTrue(login) project = Proyecto.objects.get(nombre='Proyecto01') fase = Fase.objects.get(nombre='Fase01') fase.proyecto = project fase.save() tipoItem = TipoItem.objects.get(nombre='TipoItem01') dato_item_exito = { 'usuario': self.user, 'usuario_modificacion': self.user, 'nombre': 'Item01', 'descripcion': 'Esto es un Item de prueba', 'estado' : 'ACT', 'fecha_creacion': timezone.now(), 'fecha_modificacion': timezone.now(), 'tipoitem': tipoItem.id, 'complejidad': 10, 'costo': 10, 'tiempo': 10, 'version': 1, 'linea_base': '', } print 'Prueba de Exitosa' request = self.factory.post('/createitem/', dato_item_exito) request.user = self.user request.session = {} response = createItem(request, id_fase=fase.id) self.assertEqual(response.status_code, 302, 'Error al crear el Item') print ItemBase.objects.all() print '\nPrueba con Error Previsto' dato_item_falso = { 'usuario': self.user, 'usuario_modificacion': self.user, 'nombre': 'Item01', 'descripcion': 'Esto es un Item de prueba', 'estado' : 'ACT', 'fecha_creacion': timezone.now(), 'fecha_modificacion': timezone.now(), 'tipoitem': tipoItem, 'complejidad': 10, 'costo': 10, 'tiempo': 10, 'version': 1, 'linea_base': '', } form = itemForm(dato_item_falso) try: form.save() except TypeError as e: print e print 'Error en el formulario, el campo tipo de item no recibe un dato válido' request = self.factory.post('/createitem/', dato_item_falso) request.user = self.user request.session = {} response = createItem(request, id_fase=fase.id) if response.status_code == 200: self.assertEqual(response.status_code, 200, 'Error en la creación de ítems, los datos ingresados en el formulario no son válidos') print 'Es posible establecer una conexión con la vista. \nPero no es posible crear el ítem, ya que existen campos inválidos en el formulario.' else: self.assertEqual(response.status_code, 302, 'Error en la creación de ítems, los datos ingresados en el formulario no son válidos') print 'Fin - Prueba: Creacion de Item\n'