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"