def save(self, commit=True): cleaned_data = super(RegistrarTareaForm, self).clean() #usuario = Usuario.objects.get(user=self.instance) #proyecto = Proyecto.objects.get(pk=self.instance.pk) sprint = super(RegistrarTareaForm, self).save(commit=True) user_story = UserStory.objects.get(pk=self.cleaned_data['id'].pk) tarea = Tarea() tarea.user_story = user_story tarea.descripcion = self.cleaned_data['descripcion'] tarea.horas_de_trabajo = self.cleaned_data['horas'] tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Registro de Tarea' tarea.usuario = self.user tarea.save() user_story.horas_acumuladas = user_story.horas_acumuladas + tarea.horas_de_trabajo user_story.save() return sprint
def save(self, commit=True): print "saaaaa" cleaned_data = super(AgregarNotaForm, self).clean() #usuario = Usuario.objects.get(user=self.instance) #proyecto = Proyecto.objects.get(pk=self.instance.pk) sprint = super(AgregarNotaForm, self).save(commit=True) user_story = UserStory.objects.get(pk=self.cleaned_data['id'].pk) #proyecto = Proyecto.objects.get(pk=self.cleaned_data['proyecto'].pk) nota = Nota() nota.texto = self.cleaned_data['texto'] nota.user_story = user_story nota.usuario = self.user print "save nota = %s" % user_story user_story.estado = 'Aprobado' user_story.save() tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Aprobar user story" tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Cambio de Estado' tarea.usuario = self.user tarea.save() historial_us = HistorialUserStory(user_story=user_story, operacion='aprobado', usuario=self.user) historial_us.save() nota.save() return sprint
def aprobar_user_story(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que permite aprobar un user story finalizado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ template = 'sprints/user_story_aprobar.html' proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) usuario = request.user detalle = UserStoryDetalle.objects.get(user_story=user_story) lista_tareas_us = Tarea.objects.filter(user_story=user_story) horas_acumuladas = 0 us_id = user_story.id uri = request.build_absolute_uri() print "uri= %s" % uri uri_us = urlparse.urljoin(uri, '../../tareas/%s/' % us_id) print "uri_us= %s" % uri_us for tarea in lista_tareas_us: horas_acumuladas = horas_acumuladas + tarea.horas_de_trabajo if request.method == 'POST': user_story.estado = 'Aprobado' user_story.save() tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Aprobar user story" tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user tarea.save() #se envia la notificacion a traves de celery aprobacion_user_story.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) return HttpResponseRedirect(reverse('sprints:kanban', args=[pk_proyecto, pk_sprint])) return render(request, template, locals())
def adjuntar_archivo(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que permite adjuntar un archivo a un user story seleccionado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ template = 'sprints/user_story_adjuntar_archivo.html' proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) usuario = request.user detalle = UserStoryDetalle.objects.get(user_story=user_story) lista_archivos = Archivo.objects.filter(user_story=user_story) if request.method == 'POST': form = AdjuntarArchivoForm(request.POST, request.FILES) try: if form.is_valid: nuevo_archivo = Archivo(user_story=user_story, archivo=request.FILES['archivo']) #nuevo_archivo.user_Story = user_story nuevo_archivo.save() tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Adjuntar archivo" tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Registro de Tarea' tarea.usuario = request.user tarea.save() return HttpResponseRedirect(reverse('sprints:adjuntar_archivo', args=[pk_proyecto, pk_sprint, pk_user_story])) except Exception, e: print e mensaje = 'No se pudo subir el archivo.' return render(request, 'sprints/user_story_adjuntar_archivo.html', locals())
def revertir_estado(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que revierte el estado y/o la actividad de un user story seleccionado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) actividades = user_story.flujo.actividades.all().order_by('pk') #estados = actividades[0].estados.all() detalle = UserStoryDetalle.objects.get(user_story=user_story) us_original_act = user_story.userstorydetalle.actividad us_original_est = user_story.userstorydetalle.estado us_id = user_story.id uri = request.build_absolute_uri() print "uri= %s" % uri uri_us = urlparse.urljoin(uri, '../../tareas/%s/' % us_id) print "uri_us= %s" % uri_us for index, act in enumerate(actividades): estados = act.estados.all() if us_original_act == act: if actividades[0] != us_original_act: if user_story.estado == 'Activo': detalle.actividad = actividades[index-1] tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Revertir: - Actividad: %s -> %s" % (us_original_act, actividades[index-1]) tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = detalle.actividad est = actividades[index-1].estados.all() tarea.estado = est[0] tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user #tarea.estado = detalle.estado tarea.save() detalle.estado = est[0] #se envia la notificacion a traves de celery reversion_estado.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) if user_story.estado == 'Finalizado': detalle.actividad = actividades[index] tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Revertir: - Estado: %s -> %s" % (us_original_est, actividades[index].estados.all()[0]) tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = detalle.actividad est = actividades[index].estados.all() tarea.estado = est[0] tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user #tarea.estado = detalle.estado tarea.save() detalle.estado = est[0] user_story.estado = 'Activo' #se envia la notificacion a traves de celery reversion_estado.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) detalle.save() user_story.save() return HttpResponseRedirect(reverse('sprints:kanban', args=[pk_proyecto, pk_sprint]))
def save(self, commit=True): cleaned_data = super(RegistrarTareaForm, self).clean() #usuario = Usuario.objects.get(user=self.instance) #proyecto = Proyecto.objects.get(pk=self.instance.pk) sprint = super(RegistrarTareaForm, self).save(commit=True) user_story = UserStory.objects.get(pk=self.cleaned_data['id'].pk) tarea = Tarea() tarea.user_story = user_story tarea.descripcion = self.cleaned_data['descripcion'] tarea.horas_de_trabajo = self.cleaned_data['horas'] tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Registro de Tarea' tarea.usuario = self.user tarea.save() return sprint
def aprobar_user_story(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que permite aprobar un user story finalizado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ template = 'sprints/user_story_aprobar.html' proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) usuario = request.user detalle = UserStoryDetalle.objects.get(user_story=user_story) lista_tareas_us = Tarea.objects.filter(user_story=user_story) horas_acumuladas = 0 us_id = user_story.id uri = request.build_absolute_uri() print "uri= %s" % uri uri_us = urlparse.urljoin(uri, '../../tareas/%s/' % us_id) print "uri_us= %s" % uri_us for tarea in lista_tareas_us: horas_acumuladas = horas_acumuladas + tarea.horas_de_trabajo if request.method == 'POST': user_story.estado = 'Aprobado' user_story.save() tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Aprobar user story" tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user tarea.save() #se envia la notificacion a traves de celery aprobacion_user_story.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) return HttpResponseRedirect( reverse('sprints:kanban', args=[pk_proyecto, pk_sprint])) return render(request, template, locals())
def revertir_estado(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que revierte el estado y/o la actividad de un user story seleccionado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) actividades = user_story.flujo.actividades.all().order_by('pk') #estados = actividades[0].estados.all() detalle = UserStoryDetalle.objects.get(user_story=user_story) us_original_act = user_story.userstorydetalle.actividad us_original_est = user_story.userstorydetalle.estado us_id = user_story.id uri = request.build_absolute_uri() print "uri= %s" % uri uri_us = urlparse.urljoin(uri, '../../tareas/%s/' % us_id) print "uri_us= %s" % uri_us for index, act in enumerate(actividades): estados = act.estados.all() if us_original_act == act: if actividades[0] != us_original_act: if user_story.estado == 'Activo': detalle.actividad = actividades[index - 1] tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Revertir: - Actividad: %s -> %s" % ( us_original_act, actividades[index - 1]) tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = detalle.actividad est = actividades[index - 1].estados.all() tarea.estado = est[0] tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user #tarea.estado = detalle.estado tarea.save() detalle.estado = est[0] #se envia la notificacion a traves de celery reversion_estado.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) if user_story.estado == 'Finalizado': detalle.actividad = actividades[index] tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Revertir: - Estado: %s -> %s" % ( us_original_est, actividades[index].estados.all()[0]) tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = detalle.actividad est = actividades[index].estados.all() tarea.estado = est[0] tarea.tipo = 'Cambio de Estado' tarea.usuario = request.user #tarea.estado = detalle.estado tarea.save() detalle.estado = est[0] user_story.estado = 'Activo' #se envia la notificacion a traves de celery reversion_estado.delay(proyecto.nombre_corto, sprint.nombre, user_story.nombre, user_story.flujo.nombre, uri_us) detalle.save() user_story.save() return HttpResponseRedirect( reverse('sprints:kanban', args=[pk_proyecto, pk_sprint]))
def adjuntar_archivo(request, pk_proyecto, pk_sprint, pk_user_story): """ Funcion que permite adjuntar un archivo a un user story seleccionado en un flujo. @type request: django.http.HttpRequest @param request: Contiene informacion sobre la peticion actual @type pk_proyecto: string @param pk_proyecto: id del proyecto @type pk_sprint: string @param pk_sprint: id del sprint @type pk_user_story: string @param pk_user_story: id del user story @rtype: django.http.HttpResponseRedirect @return: Renderiza sprints/sprint_kanban.html para obtener el kanban actual """ template = 'sprints/user_story_adjuntar_archivo.html' proyecto = get_object_or_404(Proyecto, pk=pk_proyecto) sprint = get_object_or_404(Sprint, pk=pk_sprint) user_story = get_object_or_404(UserStory, pk=pk_user_story) usuario = request.user detalle = UserStoryDetalle.objects.get(user_story=user_story) lista_archivos = Archivo.objects.filter(user_story=user_story) if request.method == 'POST': form = AdjuntarArchivoForm(request.POST, request.FILES) try: if form.is_valid: nuevo_archivo = Archivo(user_story=user_story, archivo=request.FILES['archivo']) #nuevo_archivo.user_Story = user_story nuevo_archivo.save() tarea = Tarea() tarea.user_story = user_story tarea.descripcion = "Adjuntar archivo" tarea.horas_de_trabajo = 0 tarea.sprint = sprint tarea.flujo = user_story.flujo tarea.actividad = user_story.userstorydetalle.actividad tarea.estado = user_story.userstorydetalle.estado tarea.tipo = 'Registro de Tarea' tarea.usuario = request.user tarea.save() return HttpResponseRedirect( reverse('sprints:adjuntar_archivo', args=[pk_proyecto, pk_sprint, pk_user_story])) except Exception, e: print e mensaje = 'No se pudo subir el archivo.' return render(request, 'sprints/user_story_adjuntar_archivo.html', locals())