Esempio n. 1
0
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)
Esempio n. 2
0
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)