def nuevasolicitud(): """ Funcion para agregar registros a la tabla Solicitud""" if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') today = datetime.date.today() form = SolicitudFormulario(request.form) # init_db(db_session) pro = db_session.query(Proyecto).filter_by(id=session['pry']).first() if pro.estado != 'P' : flash('No se pueden agregar Solicitudes a un Proyecto que no se encuentre En Progreso','info') return render_template('solicitud/administrarsolicitud.html') form.estado.data = 'Nueva' form.id_proyecto.data = pro.nombre form.id_usuario.data = current_user.usuario form.fecha.data = today form.cant_votos.data = 0 #id_fase = request.args.get('id_fase') #if (id_fase!=None): # session['faseid'] = id_fase items = db_session.query(Item).from_statement("Select it.* from item it, "+ " (Select i.codigo cod, max(i.version) vermax from item i, fase f where i.id_fase = f.id "+ " and f.id_proyecto = "+str(session['pry'])+ " group by codigo order by 1 ) s "+ " where it.codigo = cod and it.version= vermax and it.estado = 'B' " + " and it.id not in(select id_item from solicitud_item where id_solicitud in (select id from solicitud_cambio " + " where id_proyecto = "+str(session['pry'])+" and (estado='N' or estado ='E'))) order by it.codigo ").all() if request.method == 'POST' and form.validate(): # init_db(db_session) try: multiselect= request.form.getlist('selectitem') list_aux=[] for it in multiselect : i = db_session.query(Item).filter_by(id=it).first() list_aux.append(i) #id_fase= i.id_fase if list_aux == None or list_aux == []: flash('Debe seleccionar un item','info') return render_template('solicitud/administrarsolicitud.html') solicitud = SolicitudCambio(form.descripcion.data, 'N', today, 0, current_user.id, pro.id ) db_session.add(solicitud) db_session.commit() #se guarda la solicitud junto con los item pertenecientes al mismo for it in list_aux: solit= SolicitudItem(solicitud.id, it.id) db_session.add(solit) db_session.commit() flash('La solicitud ha sido registrada con exito','info') return redirect('/solicitud/administrarsolicitud') except DatabaseError, e: if e.args[0].find('duplicate key value violates unique')!=-1: flash('Clave unica violada por favor ingrese otro NUMERO de Solicitud' ,'error') else: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('solicitud/nuevasolicitud.html', form= form, items= items)
def agregaritemsol(): """ Funcion para asignar Items a una solicitud""" if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') if request.args.get('id_sol') == None: id_sol= request.form.get('id') else: id_sol=request.args.get('id_sol') sol = db_session.query(SolicitudCambio).filter_by(id=id_sol).first() if sol.estado != 'N' : flash('No se pueden agregar Items a Solicitudes que hayan sido enviadas para su Aprobacion','info') return render_template('solicitud/administrarsolicitud.html') form = SolicitudFormulario(request.form,sol) solicitud = db_session.query(SolicitudCambio).filter_by(id=sol.id).first() itemssol= db_session.query(Item).join(SolicitudItem, Item.id== SolicitudItem.id_item).filter(SolicitudItem.id_solicitud== id_sol ).filter(Item.estado=='B').all() item_aux= db_session.query(Item).join(SolicitudItem, Item.id== SolicitudItem.id_item).filter(SolicitudItem.id_solicitud== id_sol).first() form.estado.data = 'Nueva' itemsdisp = db_session.query(Item).from_statement("Select it.* from item it, "+ " (Select i.codigo cod, max(i.version) vermax from item i, fase f where i.id_fase = f.id "+ " and f.id_proyecto = "+str(session['pry'])+" group by codigo order by 1 ) s "+ " where it.codigo = cod and it.version= vermax and (it.estado = 'B') and it.id not in (select id_item from solicitud_item where id_solicitud in (select id from solicitud_cambio " + " where id_proyecto = "+str(session['pry'])+" and (estado='N' or estado ='E')) ) order by it.codigo " ) if request.method == 'POST' and form.validate(): items=request.form.getlist('selectitem') try: list_aux=[] for it in items : i = db_session.query(Item).filter_by(id=it).first() list_aux.append(i) if list_aux == None or list_aux == []: flash('Debe seleccionar un item','info') return render_template('solicitud/administrarsolicitud.html') #se guarda la sol junto con los item pertenecientes al mismo for it in list_aux: solit= SolicitudItem(solicitud.id, it.id) db_session.add(solit) db_session.commit() flash('Se agrego el Item con Exito','info') return redirect('/solicitud/administrarsolicitud') except DatabaseError, e: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('solicitud/agregaritemsol.html', form=form, items= itemsdisp)
def quitaritemsol(): """ Funcion para quitar Items de una sol""" if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') if request.args.get('id_sol') == None: id_sol= request.form.get('id') else: id_sol=request.args.get('id_sol') sol = db_session.query(SolicitudCambio).filter_by(id=id_sol).first() if sol.estado != 'N' : flash('No se pueden eliminar Items a Solicitudes que hayan sido enviadas para su Aprobacion','info') return render_template('solicitud/administrarsolicitud.html') form = SolicitudFormulario(request.form,sol) #solicitud = db_session.query(SolicitudCambio).filter_by(id= sol.id).first() #itemssol= db_session.query(SolicitudItem).join(Item, SolicitudItem.id_item== Item.id).filter(SolicitudItem.id_solicitud== sol.id ).all() #itemssol= db_session.query(SolicitudItem).from_statement("select * from item where id in(select id_item from solicitud_item where id_solicitud='"+str(sol.id)+"')") itemssol= db_session.query(Item).join(SolicitudItem, Item.id== SolicitudItem.id_item).filter(SolicitudItem.id_solicitud== sol.id ).all() if request.method == 'POST' and form.validate(): items=request.form.getlist('selectitem') try: list_aux=[] if len(itemssol) == len(items): flash('La Solicitud no puede quedarse sin Items','info') return redirect('/solicitud/administrarsolicitud') for it in items : i = db_session.query(Item).filter_by(id=it).first() # item = Item(i.codigo, i.nombre, i.descripcion, 'A', i.complejidad, today, i.costo, # session['user_id'] , i.version +1 , i.id_fase , i.id_tipo_item , i.archivo) # db_session.add(item) # db_session.commit() list_aux.append(i) #se elimina el id de los item de la sol for it in list_aux: s = db_session.query(SolicitudItem).filter_by(id_item=it.id).first() db_session.delete(s) db_session.commit() flash('Se quito el Item con Exito','info') return redirect('/solicitud/administrarsolicitud') except DatabaseError, e: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('solicitud/quitaritemsol.html', form=form, items=itemssol)
def editarsolicitud(): """ Funcion para editar registros de la tabla Solicitud""" if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') today = datetime.date.today() pro = db_session.query(Proyecto).filter_by(id=session['pry']).first() if request.args.get('id') == None: id_sol= request.form.get('id') else: id_sol=request.args.get('id') s = db_session.query(SolicitudCambio).filter_by(id=id_sol).filter_by(id_proyecto=session['pry']).first() itemssol= db_session.query(Item).from_statement("select * from item where id in(select id_item from solicitud_item where id_solicitud="+str(id_sol)+")") form = SolicitudFormulario(request.form,s) solicitud = db_session.query(SolicitudCambio).filter_by(id=id_sol).filter_by(id_proyecto=session['pry']).first() form.fecha.data = today form.id_proyecto.data = pro.nombre form.id_usuario.data = current_user.usuario form.cant_votos.data = 0 if pro.estado != 'P' : flash('No se pueden editar Solicitudes a un Proyecto que no se encuentre En Progreso','info') return render_template('solicitud/administrarsolicitud.html') if solicitud.estado != 'N' : flash('No se pueden modificar Solicitudes que hayan sido enviadas para su Aprobacion','info') return render_template('solicitud/administrarsolicitud.html') if solicitud.estado=='N': form.estado.data='Nueva' if request.method == 'POST' and form.validate(): try: form.populate_obj(solicitud) if form.estado.data=='Nueva': solicitud.estado='N' solicitud.id_proyecto=pro.id solicitud.id_usuario=current_user.id db_session.merge(solicitud) db_session.commit() return redirect('/solicitud/administrarsolicitud') except DatabaseError, e: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('solicitud/editarsolicitud.html', form=form, items=itemssol)