def agregar_proyecto(request): valid = validate(request) if valid == True: validate(request) if request.method == 'POST': nombre = request.POST.get('nombre') Proyecto.objects.create(nombre=nombre) return redirect(request.META.get('HTTP_REFERER')) return valid
def calidad_task(request, id_task): valid = validate(request) if valid == True: form_defecto = DefectoForm() task = get_object_or_404(Task, pk=id_task) return render(request, 'calidad_task.html', {'task':task, 'form_defecto':form_defecto}) return valid
def log_task(request, id_task): valid = validate(request) if valid == True: if request.method == 'POST': task = get_object_or_404(Task, pk=id_task) persona = get_object_or_404(Persona, nombre=request.session['user']) form = AcabarTask(request.POST) if form.is_valid(): print("hola") log = form.save(commit=False) tiempo = log.fin-log.inicio log.tiempo = tiempo.total_seconds()/3600.0 #No se acabó if form.cleaned_data['acabada'] == 0: if task.estado == 0: task.estado = 1 #Sí se acabó elif form.cleaned_data['acabada'] == 1: if task.informacion_defecto: task.estado = 3 task.fecha_termino = datetime.datetime.now() task.save() log.task = task log.persona = persona log.save() return redirect('workitems:ver_workitem', task.work_item.id) else: task.estado = 2 task.save() log.task = task log.persona = persona log.save() return redirect(request.META.get('HTTP_REFERER')) return valid
def index(request): valid = validate(request) if valid == True: proyectos = Proyecto.objects.all() return render(request, 'index_proyectos.html', {'proyectos': proyectos}) return valid
def ver_task(request, id_task): valid = validate(request) if valid == True: task = get_object_or_404(Task, pk=id_task) form_defecto = DefectoForm(proyecto=task.work_item.proyecto) form_acabar_task = AcabarTask() return render(request, 'detalle_task.html', {'task':task,'form_acabar_task':form_acabar_task, 'form_defecto':form_defecto}) return valid
def terminar_task(request,id_task): valid = validate(request) if valid == True: task = get_object_or_404(Task, pk=id_task) task.estado = 3 task.fecha_termino = datetime.datetime.now() task.save() return redirect(reverse('workitems:ver_workitem', kwargs={'id_workitem':task.work_item.id})) return valid
def agregar_task(request, id_workitem): valid = validate(request) if valid == True: if request.method == 'POST': form = ModalTask(request.POST) if form.is_valid(): task = form.save(commit=False) workitem = get_object_or_404(WorkItem, pk=id_workitem) task.work_item = workitem task.save() return redirect(request.META.get('HTTP_REFERER')) return valid
def agregar_workitem(request, id_proyecto): valid = validate(request) if valid == True: if request.method == 'POST': form = WorkItemForm(request.POST) if form.is_valid(): workitem = form.save(commit=False) proyecto = get_object_or_404(Proyecto, pk=id_proyecto) workitem.proyecto = proyecto workitem.save() return redirect(request.META.get('HTTP_REFERER')) return valid
def ver_workitem(request, id_workitem): valid = validate(request) if valid == True: workitem = get_object_or_404(WorkItem, pk=id_workitem) form_task = ModalTask() form_defecto = DefectoForm(proyecto=workitem.proyecto) return render( request, 'detalle_work_item.html', { 'workitem': workitem, 'form_task': form_task, 'form_defecto': form_defecto }) return valid
def agregar_defecto(request): valid = validate(request) if valid == True: form = DefectoForm(request.POST) if form.is_valid(): descripcion = form.cleaned_data['descripcion'] tiempo_estimado = form.cleaned_data['tiempo_estimado'] workitem = form.cleaned_data['workitem'] t = Task.objects.create(descripcion=descripcion, tiempo_estimado=tiempo_estimado, work_item=workitem, tipo='DEFECTOS') t.save() persona = get_object_or_404(Persona, nombre=request.session['user']) task_asociado = form.cleaned_data['task'] tipo = form.cleaned_data['tipo'] d = InfoDefecto.objects.create(persona=persona, task_asociado=task_asociado, task_encontrado=task_asociado, tipo=tipo) d.save() t.informacion_defecto = d t.save() return redirect(request.META.get('HTTP_REFERER'))
def resumen(request, id_persona): valid = validate(request) if valid == True: persona = get_object_or_404(Persona, pk=id_persona) logs = PersonaTaskRelacion.objects.filter(persona=persona) logs_por_dia = obtener_logs_por_dia(persona) cursor = connection.cursor() #TIEMPO FASES cursor.execute( ''' SELECT tipo, SUM(tiempo_estimado) as planeado FROM (SELECT tasks_task.id, tipo, tiempo_estimado FROM "tasks_task" INNER JOIN "tasks_personataskrelacion" ON ("tasks_task"."id" = "tasks_personataskrelacion"."task_id") INNER JOIN "personas_persona" ON ("tasks_personataskrelacion"."persona_id" = "personas_persona"."id") WHERE ("personas_persona"."nombre" = %s AND NOT ("tasks_task"."tipo" IS NULL))) as sub GROUP BY tipo''', [persona.nombre]) tiempo_planeado = cursor.fetchall() cursor.execute( ''' SELECT tipo, SUM(tiempo) as valor FROM (SELECT tasks_task.id, tipo, tiempo FROM "tasks_task" INNER JOIN "tasks_personataskrelacion" ON ("tasks_task"."id" = "tasks_personataskrelacion"."task_id") INNER JOIN "personas_persona" ON ("tasks_personataskrelacion"."persona_id" = "personas_persona"."id") WHERE ("personas_persona"."nombre" = %s AND NOT ("tasks_task"."tipo" IS NULL))) as sub GROUP BY tipo''', [persona.nombre]) tiempo_real = cursor.fetchall() tiempos = [] tiempo_planeado_total = 0 tiempo_real_total = 0 for tiempo in tiempo_planeado: for registro in tiempo_real: if tiempo[0] == registro[0]: tiempo_planeado_total += tiempo[1] tiempo_real_total += registro[1] try: porcentaje = round(((registro[1] * 100) / tiempo[1]), 2) except ZeroDivisionError: porcentaje = 0 tiempos.append({ 'tipo': tiempo[0], 'planeado': tiempo[1], 'real': registro[1], 'porcentaje': porcentaje }) try: porcentaje_total = round( tiempo_real_total * 100 / tiempo_planeado_total, 2) except ZeroDivisionError: porcentaje_total = 0 total = { 'tipo': 'TOTAL', 'planeado': tiempo_planeado_total, 'real': tiempo_real_total, 'porcentaje': porcentaje_total } #DEFECTOS defectos_inyectados = InfoDefecto.objects.values( 'task_asociado__tipo').filter( persona__nombre=persona.nombre).annotate( Count('task_asociado__tipo')).exclude( task_asociado__tipo=None) defectos_resueltos = Task.objects.values( 'informacion_defecto__task_asociado__tipo').filter( informacion_defecto__persona=persona).filter( estado=3).annotate( Count('informacion_defecto__task_asociado__tipo') ).exclude(informacion_defecto__task_asociado__tipo=None) defectos = [] total_inyectados = 0 total_resueltos = 0 for x in defectos_inyectados: for z in defectos_resueltos: if x['task_asociado__tipo'] == z[ 'informacion_defecto__task_asociado__tipo']: total_inyectados += x['task_asociado__tipo__count'] total_resueltos += z[ 'informacion_defecto__task_asociado__tipo__count'] try: porcentaje = round((( z['informacion_defecto__task_asociado__tipo__count'] * 100) / x['task_asociado__tipo__count']), 2) except ZeroDivisionError: porcentaje = 0 defectos.append({ 'tipo': x['task_asociado__tipo'], 'inyectados': x['task_asociado__tipo__count'], 'resueltos': z['informacion_defecto__task_asociado__tipo__count'], 'porcentaje': porcentaje }) try: porcentaje_total = round( ((total_resueltos * 100) / total_inyectados), 2) except ZeroDivisionError: porcentaje_total = 0 total_defectos = { 'tipo': 'TOTAL', 'inyectados': total_inyectados, 'resueltos': total_resueltos, 'porcentaje': porcentaje_total } return render( request, 'resumen_persona.html', { 'persona': persona, 'logs': logs, 'logs_por_dia': logs_por_dia, 'tiempos': tiempos, 'total': total, 'defectos': defectos, 'total_defectos': total_defectos }) return valid
def index(request): valid = validate(request) if valid == True: personas = Persona.objects.all() return render(request, 'index_personas.html', {'personas': personas}) return valid
def index(request): valid = validate(request) if valid == True: return render(request, 'index.html') return valid
def logout(request): valid = validate(request) if valid == True: request.session.pop('user') return redirect(reverse('login')) return valid
def detalle_proyecto(request, id_proyecto): valid = validate(request) if valid == True: proyecto = get_object_or_404(Proyecto, pk=id_proyecto) workitems = proyecto.workitem_set.all() form_work_item = WorkItemForm() cursor = connection.cursor() #TIEMPO FASES cursor.execute( ''' SELECT tipo, SUM(tiempo_estimado) as planeado FROM (SELECT tasks_task.id, tipo, tiempo_estimado FROM "tasks_task" INNER JOIN "tasks_personataskrelacion" ON ("tasks_task"."id" = "tasks_personataskrelacion"."task_id") INNER JOIN "personas_persona" ON ("tasks_personataskrelacion"."persona_id" = "personas_persona"."id") INNER JOIN "workitems_workitem" ON ("tasks_task"."work_item_id" = "workitems_workitem"."id") WHERE ("workitems_workitem"."proyecto_id" = %s AND NOT ("tasks_task"."tipo" IS NULL))) as sub GROUP BY tipo''', [id_proyecto]) tiempo_planeado = cursor.fetchall() cursor.execute( ''' SELECT tipo, SUM(tiempo) as valor FROM (SELECT tasks_task.id, tipo, tiempo FROM "tasks_task" INNER JOIN "tasks_personataskrelacion" ON ("tasks_task"."id" = "tasks_personataskrelacion"."task_id") INNER JOIN "personas_persona" ON ("tasks_personataskrelacion"."persona_id" = "personas_persona"."id") INNER JOIN "workitems_workitem" ON ("tasks_task"."work_item_id" = "workitems_workitem"."id") WHERE ("workitems_workitem"."proyecto_id" = %s AND NOT ("tasks_task"."tipo" IS NULL))) as sub GROUP BY tipo''', [id_proyecto]) tiempo_real = cursor.fetchall() tiempos = [] tiempo_planeado_total = 0 tiempo_real_total = 0 for tiempo in tiempo_planeado: for registro in tiempo_real: if tiempo[0] == registro[0]: tiempo_planeado_total += tiempo[1] tiempo_real_total += registro[1] try: porcentaje = round(((registro[1] * 100) / tiempo[1]), 2) except ZeroDivisionError: porcentaje = 0 tiempos.append({ 'tipo': tiempo[0], 'planeado': tiempo[1], 'real': registro[1], 'porcentaje': porcentaje }) try: porcentaje_total = round( tiempo_real_total * 100 / tiempo_planeado_total, 2) except ZeroDivisionError: porcentaje_total = 0 total = { 'tipo': 'TOTAL', 'planeado': tiempo_planeado_total, 'real': tiempo_real_total, 'porcentaje': porcentaje_total } # #DEFECTOS defectos_inyectados = Task.objects.filter( work_item__proyecto__id=id_proyecto, informacion_defecto__isnull=False ).values('informacion_defecto__task_asociado__tipo').annotate( task_asociado__tipo__count=Count( 'informacion_defecto__task_asociado__tipo')).exclude( informacion_defecto__task_asociado__tipo__isnull=True) defectos_resueltos = Task.objects.values( 'informacion_defecto__task_asociado__tipo').filter( work_item__proyecto__id=id_proyecto).filter(estado=3).annotate( Count('informacion_defecto__task_asociado__tipo')).exclude( informacion_defecto__task_asociado__tipo=None) defectos = [] total_inyectados = 0 total_resueltos = 0 for x in defectos_inyectados: for z in defectos_resueltos: if x['informacion_defecto__task_asociado__tipo'] == z[ 'informacion_defecto__task_asociado__tipo']: total_inyectados += x['task_asociado__tipo__count'] total_resueltos += z[ 'informacion_defecto__task_asociado__tipo__count'] try: porcentaje = round((( z['informacion_defecto__task_asociado__tipo__count'] * 100) / x['task_asociado__tipo__count']), 2) except ZeroDivisionError: porcentaje = 0 defectos.append({ 'tipo': x['informacion_defecto__task_asociado__tipo'], 'inyectados': x['task_asociado__tipo__count'], 'resueltos': z['informacion_defecto__task_asociado__tipo__count'], 'porcentaje': porcentaje }) cantidad_a_sumar_inyectados = 0 cantidad_a_sumar_resueltos = 0 for defecto in defectos: if defecto['tipo'] == "DEFECTOS": cantidad_a_sumar_inyectados = defecto['inyectados'] cantidad_a_sumar_resueltos = defecto['resueltos'] defectos.remove(defecto) for defecto in defectos: if defecto['tipo'] == "DESARROLLO": defecto['inyectados'] += cantidad_a_sumar_inyectados defecto['resueltos'] += cantidad_a_sumar_resueltos try: porcentaje = round( defecto['resueltos'] * 100 / defecto['inyectados'], 2) except ZeroDivisionError: porcentaje = 0 defecto['porcentaje'] = porcentaje try: porcentaje_total = round( ((total_resueltos * 100) / total_inyectados), 2) except ZeroDivisionError: porcentaje_total = 0 total_defectos = { 'tipo': 'TOTAL', 'inyectados': total_inyectados, 'resueltos': total_resueltos, 'porcentaje': porcentaje_total } return render( request, 'detalle_proyecto.html', { 'form_work_item': form_work_item, 'proyecto': proyecto, 'workitems': workitems, 'tiempos': tiempos, 'total': total, 'defectos': defectos, 'total_defectos': total_defectos }) return valid