def votar(request, id_solicitud):
    '''
    vista en la cual un miembro del comite emite su voto
    Tambien se comprueba que con el voto la solicitud ya sea aprobada, rechazada o siga pendiente
    1) Si es aprobada el item pasa a CON y sus items relacionados a REV y la linea base a ROTA
    2) Si es rechazada el item pasa a FIN y la linea base queda en CERRADA
    3) Si sige pendiente el item continua BLO
    '''
    solicitud=get_object_or_404(SolicitudCambio, id=id_solicitud)
    if puede_votar(request.user.id, id_solicitud)!=True:
        return HttpResponseRedirect('/denegado')
    item=solicitud.item
    if request.method=='POST':
        formulario=VotoForm(request.POST)
        if formulario.is_valid():
            voto=Voto(solicitud=solicitud,usuario=request.user,voto=request.POST['voto'])
            voto.save()
            votacionCerrada(solicitud)
            aprobada=2
            if votacionCerrada(solicitud):
                resultado(solicitud)
                if solicitud.estado=='APROBADA':
                    aprobada=1
                    item.estado='FIN'
                    item.save()
                    listaitems =itemsProyecto(solicitud.proyecto)
                    maxiditem = getMaxIdItemEnLista(listaitems)
                    global nodos_visitados
                    global papa
                    papa=item
                    nodos_visitados = [0]*(maxiditem+1)
                    estadoDependientes(item.id)
                    item.estado='CON'
                    item.save()
                    lb=item.lineaBase
                    lb.estado='ROTA'
                    lb.save()
                else:
                    item.estado='FIN'
                    item.save()
                    aprobada=0
            request.session['cantSolicitudes']=contar_solicitudes(request.user.id)
            return render_to_response('solicitudesCambio/votacion_satisfactoria.html',{'aprobada':aprobada}, context_instance=RequestContext(request))
    else:
        formulario=VotoForm()
    return render_to_response('solicitudesCambio/votar_solicitud.html',{'formulario':formulario,'solicitud':solicitud}, context_instance=RequestContext(request))
def reporte_versiones_items(id_proyecto):
    '''
    Funcion que genera el reporte de las versiones de los items de un proyecto
    '''

    fases=Fase.objects.filter(proyecto_id=id_proyecto).order_by('orden')
    proyecto = get_object_or_404(Proyecto,id=id_proyecto)
    items = itemsProyecto(proyecto.id)

    doc = SimpleDocTemplate(str(settings.BASE_DIR)+"/reporte_versiones"+proyecto.nombre+".pdf",pagesize=letter,
                            rightMargin=72,leftMargin=72,
                            topMargin=30,bottomMargin=18)


    Story=[]
    logo = str(settings.BASE_DIR)+"/static/icono.png"
    styles=getSampleStyleSheet()
    styles.add(ParagraphStyle(name='Principal',alignment=1,spaceAfter=20, fontSize=24))
    styles.add(ParagraphStyle(name='Justify',fontName='Courier-Oblique', alignment=TA_JUSTIFY, fontSize=14,spaceAfter=5))
    styles.add(ParagraphStyle(name='Titulo', fontName='Helvetica', fontSize=18, alignment=0, spaceAfter=25, spaceBefore=3))
    styles.add(ParagraphStyle(name='Header',fontName='Helvetica',fontSize=20))
    styles.add(ParagraphStyle(name='SubsubsubItems',fontName='Helvetica',fontSize=8,spaceAfter=3))
    styles.add(ParagraphStyle(name='SubsubItems',fontName='Helvetica',fontSize=10,spaceAfter=3))
    styles.add(ParagraphStyle(name='SubItems',fontName='Helvetica',fontSize=12,spaceAfter=10))
    styles.add(ParagraphStyle(name='Items',fontName='Helvetica',fontSize=14,spaceAfter=5, spaceBefore=5))
    styles.add(ParagraphStyle(name='Subtitulos',fontSize=12,spaceAfter=3))
    styles.add(ParagraphStyle(name='Encabezado',fontSize=10,spaceAfter=10, left=1, bottom=1))
    im = Image(logo, width=100,height=50)
    Story.append(im)
    contador_act=1
    titulo="<b>Versiones de Items del Proyecto "
    Story.append(Paragraph(titulo,styles['Principal']))
    Story.append(Spacer(1, 12))
    titulo= "<b>" + proyecto.nombre + "</b>"
    Story.append(Paragraph(titulo,styles['Principal']))
    Story.append(Spacer(1, 12))
    date=datetime.now()
    dateFormat = date.strftime("%d-%m-%Y")
    Story.append(Paragraph('Fecha: ' + str(dateFormat),styles['Subtitulos']))

    titulo = Paragraph('<b>Items <\b>', styles['Titulo'])
    Story.append(Spacer(1, 12))
    Story.append(titulo)
    Story.append(Indenter(25))
    Story.append(Spacer(1, 12))
    Story.append(Indenter(-25))
    for it in items:
            Story.append(Indenter(25))
            text=""+it.nombre+"<br>"
            Story.append(Paragraph(text, styles["Items"]))
            text ="______________________________________________<br>"
            Story.append(Paragraph(text, styles["Items"]))
            text ="<strong>Versiones: </strong> <br>"
            Story.append(Paragraph(text, styles["SubItems"]))
            Story.append(Indenter(-25))
            versiones=VersionItem.objects.filter(id_item=it.id)
            if len(versiones)==0:
                Story.append(Indenter(42))
                Story.append(Spacer(1, 10))
                text ="<b>El item aun no se ha modificado desde su creacion. </b><br><br>"
                Story.append(Paragraph(text, styles["SubItems"]))
                Story.append(Indenter(-42))
            for ver in versiones:
                text = ''
                Story.append(Indenter(42))
                Story.append(Spacer(1, 10))
                text ="-Version " + str(ver.version) +"<br>"
                Story.append(Paragraph(text, styles["SubItems"]))
                Story.append(Indenter(-42))

                text = ''
                Story.append(Indenter(50))
                text ="<strong>Nombre: </strong>" + ver.nombre +"<br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                Story.append(Indenter(-50))
                Story.append(Indenter(60))
                text ="<strong>Descripcion: </strong>"+ver.descripcion+" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                text ="<strong>Costo: </strong>"+str(ver.costo)+" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                text ="<strong>Tiempo: </strong>"+str(ver.tiempo)+" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                text ="<strong>Estado: </strong>"+ver.estado+" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                if ver.relacion!=None:
                   rel=get_object_or_404(Item,id=ver.relacion_id)
                   text ="<strong>Relacion: </strong> "+ver.tipo+" de "+rel.nombre+"<br>"
                else:
                   text ="<strong>Relacion: </strong> No tiene <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                dateFormat = ver.fecha_mod.strftime("%d-%m-%Y")
                text ="<strong>Fecha de modificacion: </strong>"+dateFormat+" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                text ="<strong>Usuario: </strong>"+ ver.usuario.first_name + " " + ver.usuario.last_name +" <br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                if ver.lineaBase!=None:
                   lb=get_object_or_404(LineaBase,id=ver.lineaBase_id)
                   text ="<strong>Linea Base: </strong>"+lb.nombre+" <br><br><br>"
                else:
                   text ="<strong>Linea Base: </strong> Ninguna <br><br><br>"
                Story.append(Paragraph(text, styles["SubsubItems"]))
                Story.append(Indenter(-60))


    doc.build(Story)
    return str(settings.BASE_DIR)+"/reporte_versiones"+proyecto.nombre+".pdf"
def reporte_proyectoLider(id_proyecto):
    '''
    Funcion que genera el reporte de roles del sistema
    '''

    proyecto=get_object_or_404(Proyecto, id=id_proyecto)
    doc = SimpleDocTemplate(str(settings.BASE_DIR)+"/reporte_proyecto"+proyecto.nombre+".pdf",pagesize=letter,
                            rightMargin=72,leftMargin=72,
                            topMargin=30,bottomMargin=18)

    Story=[]
    logo = str(settings.BASE_DIR)+"/static/icono.png"
    costos=itemsProyecto(id_proyecto)
    total=0
    for costo in costos:
        total=costo.costo+total

    styles=getSampleStyleSheet()
    styles.add(ParagraphStyle(name='Principal',alignment=1,spaceAfter=20, fontSize=24))
    styles.add(ParagraphStyle(name='Justify',fontName='Courier-Oblique', alignment=TA_JUSTIFY, fontSize=14,spaceAfter=5))
    styles.add(ParagraphStyle(name='Titulo', fontName='Helvetica', fontSize=18, alignment=0, spaceAfter=25, spaceBefore=15))
    styles.add(ParagraphStyle(name='Header',fontName='Helvetica',fontSize=20))
    styles.add(ParagraphStyle(name='SubItems',fontName='Helvetica',fontSize=10,spaceAfter=3))
    styles.add(ParagraphStyle(name='Items',fontName='Helvetica',fontSize=12,spaceAfter=10, spaceBefore=10))
    styles.add(ParagraphStyle(name='Subtitulos',fontSize=12,spaceAfter=3))
    styles.add(ParagraphStyle(name='Encabezado',fontSize=10,spaceAfter=10, left=1, bottom=1))
    im = Image(logo, width=100,height=50)
    Story.append(im)
    contador_act=1
    titulo="<b>Proyecto </b>"
    Story.append(Paragraph(titulo,styles['Principal']))
    Story.append(Spacer(1, 12))
    titulo="<b>"+ proyecto.nombre+ "</b>"
    Story.append(Paragraph(titulo,styles['Principal']))
    Story.append(Spacer(1, 12))
    date=datetime.now()
    dateFormat = date.strftime("%d-%m-%Y")
    Story.append(Paragraph('Fecha: ' + str(dateFormat),styles['Subtitulos']))
    name=dibujarProyecto(id_proyecto)
    grafo = str(settings.BASE_DIR)+'/static/img/'+str(name)
    referencias=str(settings.BASE_DIR)+'/static/referencias2.jpg'
    im = Image(grafo)
    h=im.imageHeight*0.35
    w=im.imageWidth*0.35
    im2=Image(referencias)
    im = Image(grafo,width=w,height=h)
    h=im2.imageHeight*0.15
    w=im2.imageWidth*0.15
    im2=Image(referencias, width=w, height=h)
    Story.append(im)
    Story.append(im2)
    text ="<strong>Descripcion: </strong>" + proyecto.descripcion+ "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    text ="<strong>Observaciones: </strong>" + proyecto.observaciones+ "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    text ="<strong>Costo Total: </strong>" + str(total) + " GS <br>"
    Story.append(Paragraph(text, styles["Items"]))
    dato=get_object_or_404(Proyecto,pk=id_proyecto)
    dateFormat = dato.fecha_ini.strftime("%d-%m-%Y")
    text ="<strong>Fecha de inicio: </strong>" + dateFormat+ "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    dateFormat = dato.fecha_fin.strftime("%d-%m-%Y")
    text ="<strong>Fecha de finalizacion planificada: </strong>" + dateFormat+ "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    if proyecto.estado=='FIN':
        dateFormat = dato.fecha_fin_real.strftime("%d-%m-%Y")
        text ="<strong>Fecha de finalizacion real: </strong>" + dateFormat+ "<br>"
        Story.append(Paragraph(text, styles["Items"]))
        today = datetime.now() #fecha actual
        dateFormat = today.strftime("%Y-%m-%d") # fecha con format
        dias=proyecto.fecha_fin_real-proyecto.fecha_fin
        dias= int(str(dias.days))
        if dias>0:
            text ="<strong>Se ha atrasado: </strong>" + "<b style=\"color=red\">" + str(dias) +"</b>"+ " dia(s)" "<br>"
            Story.append(Paragraph(text, styles["Items"]))
        else:
            if dias<0:

                dias=dias*-1
                text ="<strong>Se ha adelantado: </strong>" + '<b style="color=green">' + str(dias) +"</b>"+ " dia(s)" "<br>"
                Story.append(Paragraph(text, styles["Items"]))
            else:
                text ="<strong>Finalizado en el plazo estimado: </strong>"
                Story.append(Paragraph(text, styles["Items"]))

    else:
        today = datetime.now() #fecha actual
        dateFormat = today.strftime("%Y-%m-%d") # fecha con format
        dias=today.date()-proyecto.fecha_fin
        dias= int(str(dias.days))
        if dias>0:
            text ="<strong>Proyecto atrasado: </strong>" + "<b style=\"color=red\">" + str(dias) +"</b>"+ " dia(s)" "<br>"
            Story.append(Paragraph(text, styles["Items"]))
        else:
            if dias<=0:

                dias=dias*-1
                text ="<strong>Quedan: </strong>" + '<b style="color=green">' + str(dias) +"</b>"+ " dia(s) para finalizar el proyecto" "<br>"
                Story.append(Paragraph(text, styles["Items"]))



    comite = User.objects.filter(comite__id=id_proyecto)
    text ="<strong>Miembros del comite: </strong> <br>"
    Story.append(Paragraph(text, styles["Items"]))
    for  miembro in comite:
        Story.append(Indenter(30))
        text ="- " + miembro.first_name + " " + miembro.last_name + "<br>"
        Story.append(Paragraph(text, styles["SubItems"]))
        Story.append(Indenter(-30))
    lider = get_object_or_404(User, pk=dato.lider_id)
    text ="<strong>Lider: </strong>"  + lider.first_name + " " + lider.last_name + "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    fases=Fase.objects.filter(proyecto_id=id_proyecto)
    nombre_roles=[]
    text ="<strong>Equipo: </strong>" "<br>"
    Story.append(Paragraph(text, styles["Items"]))
    for fase in fases:
        roles=Group.objects.filter(fase__id=fase.id)
        for rol in roles:
            nombre_roles.append(rol)
            u=User.objects.filter(groups__id=rol.id)
            for user in u:
                Story.append(Indenter(30))
                uu=user.first_name + " " + user.last_name  +  "  -  " + rol.name  +" en la fase   " + fase.nombre +"\n"
                Story.append(Paragraph(uu, styles["SubItems"]))
                Story.append(Indenter(-30))


    doc.build(Story)
    return str(settings.BASE_DIR)+"/reporte_proyecto"+proyecto.nombre+".pdf"