Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
def index(request):
    valid = validate(request)
    if valid == True:
        proyectos = Proyecto.objects.all()
        return render(request, 'index_proyectos.html',
                      {'proyectos': proyectos})
    return valid
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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'))
Exemple #11
0
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
Exemple #12
0
def index(request):
    valid = validate(request)
    if valid == True:
        personas = Persona.objects.all()
        return render(request, 'index_personas.html', {'personas': personas})
    return valid
Exemple #13
0
def index(request):
    valid = validate(request)
    if valid == True:
        return render(request, 'index.html')
    return valid
Exemple #14
0
def logout(request):
    valid = validate(request)
    if valid == True:
        request.session.pop('user')
        return redirect(reverse('login'))
    return valid
Exemple #15
0
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