def nuevoproyecto(): """ Funcion para agregar registros a la tabla Proyecto""" """ Se obtiene la fecha actual para almacenar la fecha de ultima actualizacion """ if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') permission = UserRol('ADMINISTRADOR') if permission.can(): today = datetime.date.today() form = ProyFormulario(request.form) r = db_session.query(Rol).filter_by(codigo='COMITE CAMBIOS').first() r2 = db_session.query(Rol).filter_by(codigo='LIDER PROYECTO').first() form.id_usuario_lider.choices= [(u.id, u.nombre + " " + u.apellido) for u in db_session.query(Usuario).order_by(Usuario.nombre).all()] if request.method == 'POST' and form.validate(): if form.fecha_inicio.data > form.fecha_fin.data : flash('La fecha de inicio no puede ser mayor que la fecha de finalizacion','error') return render_template('proyecto/nuevoproyecto.html', form=form) if form.cant_miembros.data %2 == 0 : flash('La cantidad maxima de miembros debe ser impar','error') return render_template('proyecto/nuevoproyecto.html', form=form) try: pry = Proyecto(form.nombre.data, form.descripcion.data, 'N', form.cant_miembros.data, form.fecha_inicio.data, form.fecha_fin.data, today, form.id_usuario_lider.data) db_session.add(pry) db_session.commit() mc = MiembrosComite(pry.id, form.id_usuario_lider.data) db_session.add(mc) db_session.commit() """ Asignar los roles comite cambios y lider proyecto en caso de que no existan""" if r == None : r = Rol('COMITE CAMBIOS', 'COMITE CAMBIOS') db_session.add(r) db_session.commit() if r2 == None : r2 = Rol('LIDER PROYECTO', 'LIDER PROYECTO') db_session.add(r2) db_session.commit() """ Asignar el rol lider proyecto """ li = UsuarioRol(r2.id, pry.id_usuario_lider, pry.id) db_session.add(li) db_session.commit() """ Asignar los permisos de consulta al comite """ re = db_session.query(Recurso).filter_by(id_proyecto=pry.id).filter_by(nombre=pry.nombre).first() if re == None : re = Recurso(pry.nombre, pry.id) db_session.add(re) db_session.commit() per = db_session.query(Permiso).filter_by(id_recurso=re.id).filter_by(codigo='CONSULTAR PROYECTO').first() if per == None : per = Permiso('CONSULTAR PROYECTO', 'CONSULTAR PROYECTO', re.id) db_session.add(per) db_session.commit() rp = db_session.query(RolPermiso).filter_by(id_rol=r.id).filter_by(id_permiso=per.id).first() if rp == None : rp = RolPermiso(r.id, per.id) db_session.add(rp) db_session.commit() flash('El Proyecto ha sido registrado con exito','info') return redirect('/proyecto/administrarproyecto') except DatabaseError, e: if e.args[0].find('duplicate key value violates unique')!=-1: flash('Clave unica violada por favor ingrese otro NOMBRE de Proyecto' ,'error') else: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('proyecto/nuevoproyecto.html', form=form) else: flash_errors(form) return render_template('proyecto/nuevoproyecto.html', form=form)
def editarproyecto(): """ Se obtiene la fecha actual para almacenar la fecha de ultima actualizacion """ if not current_user.is_authenticated(): flash('Debe loguearse primeramente!!!!', 'loggin') return render_template('index.html') permission = UserRol('ADMINISTRADOR') if permission.can(): today = datetime.date.today() #init_db(db_session) r2 = db_session.query(Rol).filter_by(codigo='LIDER PROYECTO').first() p = db_session.query(Proyecto).filter_by(nombre=request.args.get('nom')).first() form = ProyFormulario(request.form,p) proyecto = db_session.query(Proyecto).filter_by(nombre=form.nombre.data).first() form.id_usuario_lider.choices= [(u.id, u.nombre + " " + u.apellido) for u in db_session.query(Usuario).order_by(Usuario.nombre).all()] mc = proyecto.id_usuario_lider if proyecto.estado == 'N' : form.estado.data = 'Nuevo' elif proyecto.estado == 'P' : form.estado.data = 'En Progreso' elif proyecto.estado == 'A' : form.estado.data = 'Anulado' elif proyecto.estado == 'F' : form.estado.data = 'Finalizado' if request.method == 'POST' and form.validate(): if form.fecha_inicio.data > form.fecha_fin.data : flash('La fecha de inicio no puede ser mayor que la fecha de finalizacion','error') return render_template('proyecto/editarproyecto.html', form=form) if form.cant_miembros.data %2 == 0 : flash('La cantidad maxima de miembros debe ser impar','error') return render_template('proyecto/editarproyecto.html', form=form) try: form.populate_obj(proyecto) proyecto.fecha_ultima_mod = today if form.estado.data == 'Nuevo' : proyecto.estado = 'N' elif form.estado.data == 'En Progreso' : proyecto.estado = 'P' elif form.estado.data == 'Anulado' : proyecto.estado = 'A' elif form.estado.data == 'Finalizado' : proyecto.estado = 'F' db_session.merge(proyecto) db_session.commit() if mc != proyecto.id_usuario_lider: miembrosComite = db_session.query(MiembrosComite).filter_by(id_usuario=mc).filter_by(id_proyecto=proyecto.id).first() #init_db(db_session) db_session.delete(miembrosComite) db_session.commit() lr = db_session.query(UsuarioRol).filter_by(id_rol=r2.id).filter_by(id_usuario=mc).filter_by(id_proyecto=proyecto.id).first() #init_db(db_session) db_session.delete(lr) db_session.commit() miembro = MiembrosComite(proyecto.id, proyecto.id_usuario_lider) db_session.add(miembro) db_session.commit() li = UsuarioRol(r2.id, proyecto.id_usuario_lider, proyecto.id) db_session.add(li) db_session.commit() flash('El Proyecto ha sido modificado con exito','info') return redirect('/proyecto/administrarproyecto') except DatabaseError, e: flash('Error en la Base de Datos' + e.args[0],'error') return render_template('proyecto/editarproyecto.html', form=form) else: flash_errors(form) return render_template('proyecto/editarproyecto.html', form=form)