Ejemplo n.º 1
0
def admFeed():
    usuarioAtivo = current_user.get_id()

    db = utilitariosDB.getDb()
    sideBar = Markup(getSideBar())

    usuario = db['usuarios'].find_one({
        "_id": ObjectId(usuarioAtivo),
        "administrador": "S"
    })
    if usuario == None:
        return "usuários não autorizado"

    navbar = Markup(getNavBar(usuario))

    if request.method == 'POST':

        post = Post()
        post.titulo = request.form.get("feedInTitulo", '')
        post.descricao = request.form.get("feedInMensagem", '')
        post.momento = datetime.now()

        # Salvando no banco
        db = utilitariosDB.getDb()
        post.salvarMongoDb(db)

        return render_template("admFeed.html",
                               sideBarWS=sideBar,
                               navbarWS=navbar)
    else:
        return render_template("admFeed.html",
                               sideBarWS=sideBar,
                               navbarWS=navbar)
Ejemplo n.º 2
0
def cadAdmAtividades():
    if request.method == 'GET':
        usuarioAtivo = current_user.get_id()

        db = utilitariosDB.getDb()
        sideBar = Markup(getSideBar())

        usuario = db['usuarios'].find_one({
            "_id": ObjectId(usuarioAtivo),
            "administrador": "S"
        })
        if usuario == None:
            return "usuários não autorizado"

        navbar = Markup(getNavBar(usuario))

        return render_template("cadastarAtividadesDesktop.html",
                               sideBarWS=sideBar,
                               navbarWS=navbar)

    if request.method == 'POST':
        evento = Evento()

        evento.titulo = request.form.get("tTitulo", '')
        evento.categoria = request.form.get("selCategoria", '')
        evento.feedBackTipo = request.form.get("selFeedBack", '')
        evento.descricao = request.form.get("tDescricao", '')
        evento.imagem = request.form.get("fileBase64", '')
        evento.momentoExecucao = request.form.get("tDataEvento", None)
        evento.local = request.form.get("tLocal", '')
        evento.pontos = int(request.form.get("tPontos", 0))
        evento.vagas = int(request.form.get("tVagas", 0))
        evento.inscricoes = 0
        evento.usuariosInscritos = []
        evento.publicado = "N"
        evento.momentoFimInscricao = request.form.get("tDataFimInscricao",
                                                      None)
        evento.momentoCadastro = datetime.now()
        evento.concluido = "N"

        if not evento.momentoExecucao == None:
            evento.momentoExecucao = datetime.strptime(evento.momentoExecucao,
                                                       "%Y/%m/%d %H:%M")

        if not evento.momentoFimInscricao == None:
            evento.momentoFimInscricao = datetime.strptime(
                evento.momentoFimInscricao, "%Y/%m/%d %H:%M")

        # Salvando no banco
        db = utilitariosDB.getDb()
        evento.salvarMongoDb(db)

        return redirect('/atividades')
Ejemplo n.º 3
0
def feedLoad():
    nItens = request.args.get('item', 0)

    if nItens == 0:
        db = utilitariosDB.getDb()
        posts = db['post'].find().limit(10).sort([("momento",
                                                   pymongo.DESCENDING)])

    else:
        db = utilitariosDB.getDb()
        posts = db['post'].find().limit(int(nItens) * 10).sort([
            ("momento", pymongo.DESCENDING)
        ])

    post = ''
    for i in posts:
        titulo = i.get('titulo', '')
        midia = i.get('midia', '')
        midiaTipo = i.get('midiaTipo', '')
        descricao = i.get('descricao', '')
        postId = i.get('_id', '')

        descricao = "<br />".join(descricao.split("\n"))

        pt = ('<div class="card shadow mb-4">'
              '<div class="card-header py-3">'
              '<h6 class="m-0 font-weight-bold text-primary text-center">' +
              titulo + '</h6>'
              '</div>'
              '<div class="card-body">')

        if (midiaTipo == "imgB64") and (midia != ""):
            pt = pt + (
                '<div class="text-center">'
                '<img class="img-fluid px-3 px-sm-4 mt-3 mb-4" style="width: 25rem;" src="'
                + midia + '" alt="">'
                '</div>')

        pt = pt + (
            '<p>' + descricao + '</p>'
            '</div>'
            '<div  >'
            '<i id="' + str(postId) +
            '" class="fas fa-comments fa-2x text-gray-300 float-right mb-2 col-md-auto" onclick="getloadComentario(this)" style="color: f6c23e!important" ></i>'
            '</div>'
            '<div class="card-footer" id="postFooter' + str(postId) + '">'
            '<small class="text-muted">Comentarios...</small>'
            '</div>'
            '</div>')

        post = post + pt

    return Markup(post)
Ejemplo n.º 4
0
def index():
    sideBar = Markup(getSideBar())

    usuarioAtivo = current_user.get_id()
    db = utilitariosDB.getDb()
    usuario = db['usuarios'].find_one({"_id": ObjectId(usuarioAtivo)})
    navbar = Markup(getNavBar(usuario))

    return render_template("indexDesktop.html", sideBarWS=sideBar, navbarWS=navbar)
Ejemplo n.º 5
0
def getComentario():
    if request.method == 'GET':
        post = request.args.get('postId')
        cm = ""
        if (post > ''):
            db = utilitariosDB.getDb()
            comentarios = db['comentarios'].find({"post": post})
            for coment in comentarios:

                usuario = db['usuarios'].find_one(
                    {"_id": ObjectId(coment.get("usuario"))})
                if (usuario == None):
                    return None

                imagem = usuario.get("imagem", '')
                nome = usuario.get("nome", '')
                texto = coment.get("comentario", '')

                cm += ('<div class="border-left-primary">'
                       '<a class="dropdown-item d-flex align-items-center s">'
                       '<div class="mr-6 ">')

                if (imagem > ''):
                    cm += '<img class="img-profile rounded-circle img-fluid px-3 px-sm-4 mt-1 mb-4" style="width: 5rem;" src="' + imagem + '" alt="">'

                cm += (
                    '</div>'
                    '<div id="' + post + '">'
                    '<div class="small text-gray-500 mt-0 mb-0"><h6 style="width: 8rem;">'
                    + nome + '</h6>'
                    '<p class="font-italic mt-0">' + texto + '</p>'
                    '</div>'
                    '</div>'
                    '</a> '
                    '</div>')

            if cm == '':
                cm = (
                    '<div id="' + post + '" class="input-group">'
                    '<input type="text" class="form-control mr-1" name="feedComentario" id="feedComentario'
                    + post + '" placeholder="Comentar..."  >'
                    '<button  class="btn btn-info btn-circle mr-0" onclick="postComentario(this)">'
                    '<i class="fas fa-check"></i>'
                    '</button>'
                    '</div>')
            else:
                cm += (
                    '<div id="' + post + '" class="input-group">'
                    '<input type="text" class="form-control mr-1 " name="feedComentario" id="feedComentario'
                    + post + '" placeholder="Comentar..."  >'
                    '<button  class="btn btn-info btn-circle  mr-0" onclick="postComentario(this)">'
                    '<i class="fas fa-check"></i>'
                    '</button>'
                    '</div>')

        return Markup(cm)
Ejemplo n.º 6
0
def feedInsert():
    if request.method == 'POST':

        post = Post()
        post.titulo = request.form.get("feedInTitulo", '')
        post.descricao = request.form.get("feedInMensagem", '')
        post.midiaTipo = "imgB64"
        post.midia = request.form.get("fileBase64", '')
        post.momento = datetime.now()

        # Salvando no banco
        db = utilitariosDB.getDb()
        post.salvarMongoDb(db)

        return redirect("/feed")
    else:
        return render_template("feedInsert.html")
Ejemplo n.º 7
0
def postComentario():
    cont = json.loads(request.data.decode('utf-8'))
    post = cont.get('post', '')
    coment = cont.get('comentario', '')

    if (coment > ""):
        comentario = Comentarios()
        comentario.post = post
        comentario.comentario = coment
        comentario.momento = datetime.now()
        comentario.usuario = current_user.get_id()

        # Salvando no banco
        db = utilitariosDB.getDb()
        comentario.salvarMongoDb(db)

    return '', 200
Ejemplo n.º 8
0
def postPublicar():

    cont = json.loads(request.data.decode('utf-8'))
    eventoId = cont.get('eventoId', '')

    db = utilitariosDB.getDb()
    evento = db['evento'].find_one({"_id": ObjectId(eventoId)})
    publicado = evento.get('publicado', None)

    if (publicado == None) or (publicado == "N"):
        evento["publicado"] = "S"
        db['evento'].save(evento)
    else:
        evento["publicado"] = "N"
        db['evento'].save(evento)

    return 'ok', 200
Ejemplo n.º 9
0
def concluirAtividade():
    cont = json.loads(request.data.decode('utf-8'))
    eventoId = cont.get('eventoid', '')
    usuario = current_user.get_id()

    db = utilitariosDB.getDb()

    usuarioCompleto = db['usuarios'].find_one({"_id": ObjectId(usuario)})

    #Gravando que o usuário já deu feedback no evento
    evento = db['evento'].find_one({"_id": ObjectId(eventoId)})

    usuFeedBack = evento.get("usuariosFeedBack", None)

    gravou = False
    if (usuFeedBack == None):
        usuFeedBack = [usuario]
        evento["usuariosFeedBack"] = usuFeedBack
        db['evento'].save(evento)
        gravou = True
    else:

        usuFeedBack = list(usuFeedBack)
        if usuario not in usuFeedBack:
            usuFeedBack.append(usuario)
            evento["usuariosFeedBack"] = usuFeedBack
            db['evento'].save(evento)
            gravou = True

    #gravando o feedback do usuário
    if gravou:
        eventoFeedBack = EventoFeedBack()
        eventoFeedBack.evento = evento
        eventoFeedBack.feedBackTipo = evento.get('feedBackTipo', '')
        eventoFeedBack.feedback = cont.get('feedBack', '')
        eventoFeedBack.usuario = usuarioCompleto
        eventoFeedBack.status = "novo"
        eventoFeedBack.salvarMongoDb(db)

    return 'ok', 200
Ejemplo n.º 10
0
def postInscreverse():

    cont = json.loads(request.data.decode('utf-8'))
    eventoId = cont.get('eventoId', '')
    usuario = current_user.get_id()

    db = utilitariosDB.getDb()
    evento = db['evento'].find_one({"_id": ObjectId(eventoId)})
    momentoFimInscricao = evento.get('momentoFimInscricao', None)
    inscritos = evento.get("usuariosInscritos", None)

    if (inscritos == None):
        inscritos = [usuario]
        evento["usuariosInscritos"] = inscritos
        db['evento'].save(evento)
    else:

        inscritos = list(inscritos)
        if usuario in inscritos:
            if (momentoFimInscricao
                    == None) or (momentoFimInscricao >= datetime.now()):
                inscritos.remove(usuario)
                evento["usuariosInscritos"] = inscritos
                evento["inscricoes"] = evento["inscricoes"] - 1
                db['evento'].save(evento)
            else:
                return 'fimDasInscriçoes', 876

        else:
            if (momentoFimInscricao
                    == None) or (momentoFimInscricao >= datetime.now()):
                inscritos.append(usuario)
                evento["usuariosInscritos"] = inscritos
                evento["inscricoes"] = evento["inscricoes"] + 1
                db['evento'].save(evento)
            else:
                return 'fimDasInscriçoes', 876

    return 'ok', 200
Ejemplo n.º 11
0
def cadastrarEvento():
    if request.method == 'GET':
        return render_template("eventoCadastro.html")

    if request.method == 'POST':
        evento = Evento()

        evento.titulo = request.form.get("tTitulo", '')
        evento.categoria = request.form.get("selCategoria", '')
        evento.descricao = request.form.get("tDescricao", '')
        evento.imagem = request.form.get("fileBase64", '')
        evento.momentoExecucao = request.form.get("tDataEvento", None)
        evento.local = request.form.get("tLocal", '')
        evento.pontos = int(request.form.get("tPontos", 0))
        evento.vagas = int(request.form.get("tVagas", 0))
        evento.inscricoes = 0
        evento.usuariosInscritos = []
        evento.publicado = "N"
        evento.momentoFimInscricao = request.form.get("tDataFimInscricao",
                                                      None)
        evento.momentoCadastro = datetime.now()
        evento.concluido = "N"

        if not evento.momentoExecucao == None:
            evento.momentoExecucao = datetime.strptime(evento.momentoExecucao,
                                                       "%Y/%m/%d %H:%M")

        if not evento.momentoFimInscricao == None:
            evento.momentoFimInscricao = datetime.strptime(
                evento.momentoFimInscricao, "%Y/%m/%d %H:%M")

        # Salvando no banco
        db = utilitariosDB.getDb()
        evento.salvarMongoDb(db)

        return 'ok', 200
Ejemplo n.º 12
0
def getAgenda():
    usuarioAtivo = current_user.get_id()

    db = utilitariosDB.getDb()
    eventos = db['evento'].find({
        "concluido": "N",
        "usuariosInscritos": usuarioAtivo,
        "usuariosFeedBack": {
            "$nin": [usuarioAtivo]
        }
    }).sort([("momentoExecucao", pymongo.DESCENDING)])

    evento = ''
    for reg in eventos:
        eventoId = reg.get('_id', '')
        titulo = reg.get('titulo', '')
        categoria = reg.get('categoria', '')
        descricao = reg.get('descricao', '')
        imagem = reg.get('imagem', '')
        momentoExecucao = reg.get('momentoExecucao', '')
        local = reg.get('local', '')
        pontos = reg.get('pontos', '')
        vagas = reg.get('vagas', '')
        inscricoes = reg.get('inscricoes', '')
        usuariosInscritos = reg.get('usuariosInscritos', None)
        publicado = reg.get('publicado', '')
        momentoFimInscricao = reg.get('momentoFimInscricao', '')
        momentoCadastro = reg.get('momentoCadastro', '')
        concluido = reg.get('concluido', '')

        descricao = "<br />".join(descricao.split("\n"))

        evento += (
            '<div  class="col-xl-3 col-md-6 mb-4">'
            '<div class="card border-left-primary shadow h-100 py-2">'
            '<div class="card-body">'
            '<div class="row no-gutters align-items-center">'
            '<div class="col mr-2">'
            '<div class="text-xs font-weight-bold text-primary text-uppercase mb-0">'
            + categoria + ' - ' + titulo + '</div>'
            '<div class="h5 mb-0 font-weight-bold text-gray-800">' +
            momentoExecucao.strftime("%d/%m as %H horas") + '</div>'
            '</div>'
            '<div class="col-auto">'
            '<i class="fas fa-calendar fa-2x text-primary mr-1" data-toggle="modal" data-target="#eventoModal'
            + str(eventoId) + '"></i>'
            '<i class="fas fa-check fa-2x text-success" id="' + str(eventoId) +
            '" onclick="concluirAtividade(this)"></i>'
            '</div>'
            '</div>'
            '</div>'
            '</div>'
            '</div>')

        evento += ('<div class="modal fade" id="eventoModal' + str(eventoId) +
                   '" tabindex="-1" role="dialog"  >'
                   '<div class="modal-dialog" role="document">'
                   '<div class="modal-content">')

        evento += (
            '<div class="card shadow-lg mb-4">'
            '<div class="card-header py-3">'
            '<h6 class="m-0 font-weight-bold text-primary text-center">' +
            titulo + '</h6>')

        evento += ('</div>' '<div class="card-body pb-2 mb-1">')
        if (imagem > ''):
            evento += (
                '<div class="text-center ">'
                '<img class="img-fluid px-3 px-sm-4 mt-3 mb-4 " style="width: 25rem;" src="'
                + imagem + '" alt="">'
                '</div>')

        evento += ('<div class="card py-3 border-bottom-primary">'
                   '<div class="card-body pb-0 pt-0">'
                   '<p class="mb-0 pb-0 mt-0">' + descricao + '</p>'
                   '</div>'
                   '</div>'
                   '</div>'
                   '<div class="card-footer pb-0 pt-3 mt-0 text-center">'
                   '<div class="btn-group mb-0" role="group">'
                   '<p  class="btn btn-success btn-icon-split">'
                   '<span class="icon text-white-50">' + str(pontos) +
                   '</span>'
                   '<span class="text">Pontos</span>'
                   '</p>')

        if (vagas > 0):
            evento += ('<p  class="btn btn-warning btn-icon-split ml-1">'
                       '<span class="icon text-white-50">' +
                       str(vagas - inscricoes) + '</span>'
                       '<span class="text">Vagas</span>'
                       '</p>')

        evento += ('<p  class="btn btn-primary btn-icon-split ml-1">'
                   '<span class="icon text-white-50">' +
                   momentoExecucao.strftime("%d/%m") + '</span>'
                   '<span class="text">' + momentoExecucao.strftime("%H") +
                   'h</span>'
                   '</p>'
                   '</div>'
                   '<div class="mt-0">')
        if (vagas > 0):
            evento += ('<p  class="btn btn-primary btn-icon-split ml-1">'
                       '<span class="icon text-white-50">'
                       'Incrições até'
                       '</span>'
                       '<span class="text">' +
                       momentoFimInscricao.strftime("%d/%m") + '</span>'
                       '</p>')

        if (vagas > 0):

            if (usuariosInscritos != None) and (usuarioAtivo
                                                in usuariosInscritos):
                evento += (
                    '<p  class="btn btn-success btn-icon-split ml-1" id="' +
                    str(eventoId) + '" onclick="postInscreverse(this)" >'
                    '<span class="text">Inscrito</span>')
            else:
                evento += (
                    '<p  class="btn btn-danger btn-icon-split ml-1" id="' +
                    str(eventoId) + '" onclick="postInscreverse(this)" >'
                    '<span class="text">Inscrever-se</span>')

        evento += ('</p>' '</div>' '</div>' '</div>')

        evento += (
            '<div class="modal-footer">'
            '<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>'
            '</div>'
            '</div>'
            '</div>'
            '</div>')

    return Markup(evento)
Ejemplo n.º 13
0
def getAdmFeedBack():
    # trazer todos os eventos ativos com feedback removendo os que estão no feedback ok
    # ter a intereção de dar feedback ok ou não ok
    # caso não ok o usuário deve receber um novo item na agenda

    usuarioAtivo = current_user.get_id()
    db = utilitariosDB.getDb()
    sideBar = Markup(getSideBar())

    usuario = db['usuarios'].find_one({
        "_id": ObjectId(usuarioAtivo),
        "administrador": "S"
    })
    if usuario == None:
        return "usuários não autorizado"

    navbar = Markup(getNavBar(usuario))

    eventoFeedBack = db['eventoFeedBack'].find({"status": "novo"})

    evento = ''
    for reg in eventoFeedBack:
        eventoDados = reg.get('evento', '')
        usuarioDados = reg.get('usuario', '')

        evento += (
            '<div  class="col-xl-12 col-md-6 mb-4">'
            '<div class="card border-left-primary shadow h-100 py-2">'
            '<div class="card-body">'
            '<div class="row no-gutters align-items-center">'
            '<div class="col mr-2">'
            '<div class="text-xs font-weight-bold text-primary text-uppercase mb-0">'
            + eventoDados.get('categoria', '') + ' - ' +
            usuarioDados.get('nome', '') + '</div>'
            '<div class="h5 mb-0 font-weight-bold text-gray-800"> Execução da atividade: '
            + eventoDados.get('momentoExecucao',
                              '').strftime("%d/%m as %H horas") + '</div>'
            '</div>'
            '<div class="col-auto">'
            '<i class="fas fa-calendar fa-2x text-primary mr-1" data-toggle="modal" data-target="#eventoModal'
            + str(reg.get('_id', '')) + '"></i>'
            '<i class="fas fa-exclamation-circle fa-2x text-danger mr-1" id="'
            + str(reg.get('_id', '')) +
            '" onclick="reprovarFeedBack(this)"></i>'
            '<i class="fas fa-check fa-2x text-success" id="' +
            str(reg.get('_id', '')) + '" onclick="aprovarFeedBack(this)"></i>'
            '</div>'
            '</div>'
            '</div>'
            '</div>'
            '</div>')

        evento += ('<div class="modal fade" id="eventoModal' +
                   str(reg.get('_id', '')) + '" tabindex="-1" role="dialog"  >'
                   '<div class="modal-dialog" role="document">'
                   '<div class="modal-content">')

        evento += (
            '<div class="card shadow-lg mb-4">'
            '<div class="card-header py-3">'
            '<h6 class="m-0 font-weight-bold text-primary text-center">' +
            eventoDados.get('titulo', '') + '</h6>')

        evento += ('</div>' '<div class="card-body pb-2 mb-1">')

        if (reg.get('feedBackTipo', '') == 'TEXTO'):
            texto = reg.get('feedback', '').split('\n')
            evento += ('<div class="card py-3 border-bottom-primary">'
                       '<div class="card-body pb-0 pt-0">'
                       '<p class="mb-0 pb-0 mt-0">' + str(texto) + '</p>'
                       '</div>'
                       '</div>'
                       '</div>'
                       '<div class="card-footer pb-0 pt-3 mt-0 text-center">')

        evento += (
            '<div class="modal-footer">'
            '<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>'
            '</div>'
            '</div>'
            '</div>'
            '</div>')

    return render_template("admFeedBack.html",
                           contentWS=Markup(evento),
                           sideBarWS=sideBar,
                           navbarWS=navbar)
Ejemplo n.º 14
0
def getLoadAtividades():
    eventos = ""
    usuarioAtivo = current_user.get_id()

    db = utilitariosDB.getDb()
    adm = db['usuarios'].find({"_id": usuarioAtivo, "administrador": "S"})
    if adm == None:
        return "usuários não autorizado"
    else:
        evento = db['evento'].find().sort([("dataCadastro", pymongo.DESCENDING)
                                           ])

    eventos += (
        '<div class="card shadow mb-4">'
        '<div class="card-header py-3">'
        '<h6 class="m-0 font-weight-bold text-primary">Administração de Usuários</h6>'
        '<a href="/cadadmatividades">'
        '<button type="button" class="btn btn-primary float-right" >Cadastrar</button>'
        '</a>'
        '</div>'
        '<div class="card-body">'
        '<div class="table-responsive">'
        '<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">'
        '<thead>'
        '<tr>'
        '<th>Titulo</th>'
        '<th>Categoria</th>'
        '<th>Execução</th>'
        '<th>Local</th>'
        '<th>Pontos</th>'
        '<th>Vagas</th>'
        '<th>Inscrições</th>'
        '<th>Publicado</th>'
        '<th>Concluído</th>'
        '<th>Cadastro</th>'
        '<th>Publicar</th>'
        '<th>Concluir</th>'
        '</tr>'
        '</thead>'
        '<tbody>')

    for reg in evento:
        eventos += (
            '<tr id="' + str(reg.get('_id')) + '">'
            '<td>' + reg.get('titulo', '') + '</td>'
            '<td>' + reg.get('categoria', '') + '</td>'
            '<td>' + reg.get('momentoExecucao', '').strftime("%d/%m/%y") +
            '</td>'
            '<td>' + reg.get('local', '') + '</td>'
            '<td>' + str(reg.get('pontos', '')) + '</td>'
            '<td>' + str(reg.get('vagas', '')) + '</td>'
            '<td>' + str(reg.get('inscricoes', '')) + '</td>'
            '<td>' + reg.get('publicado', '') + '</td>'
            '<td>' + reg.get('concluido', '') + '</td>'
            '<td>' + reg.get('momentoCadastro', '').strftime("%d/%m/%y") +
            '</td>'
            '<td> <button type="button" class="btn btn-primary" onclick="publicarEvento(this)">Publicar</button></td>'
            '<td><button type="button" class="btn btn-primary" onclick="concluirEvento(this)">Concluir</button></td>'
            '</tr>')

    eventos += ('</tbody>' '</table>' '</div>' '</div>' '</div>')

    sideBar = Markup(getSideBar())

    usuario = db['usuarios'].find_one({"_id": ObjectId(usuarioAtivo)})
    navbar = Markup(getNavBar(usuario))

    return render_template("admUsuario.html",
                           contentWS=Markup(eventos),
                           sideBarWS=sideBar,
                           navbarWS=navbar)
Ejemplo n.º 15
0
def getEvento():
    usuarioAtivo = current_user.get_id()

    db = utilitariosDB.getDb()
    adm = db['usuarios'].find({"_id": usuarioAtivo, "administrador": "S"})
    if adm == None:
        eventos = db['evento'].find({
            "concluido": "N",
            "publicado": "S"
        }).sort([("momentoCadastro", pymongo.DESCENDING)])
    else:
        eventos = db['evento'].find({
            "concluido": "N"
        }).sort([("momentoCadastro", pymongo.DESCENDING)])

    evento = ''
    for reg in eventos:
        eventoId = reg.get('_id', '')
        titulo = reg.get('titulo', '')
        categoria = reg.get('categoria', '')
        descricao = reg.get('descricao', '')
        imagem = reg.get('imagem', '')
        momentoExecucao = reg.get('momentoExecucao', '')
        local = reg.get('local', '')
        pontos = reg.get('pontos', '')
        vagas = reg.get('vagas', '')
        inscricoes = reg.get('inscricoes', '')
        usuariosInscritos = reg.get('usuariosInscritos', None)
        publicado = reg.get('publicado', '')
        momentoFimInscricao = reg.get('momentoFimInscricao', '')
        momentoCadastro = reg.get('momentoCadastro', '')
        concluido = reg.get('concluido', '')

        descricao = "<br />".join(descricao.split("\n"))

        evento += (
            '<div class="card shadow-lg mb-4">'
            '<div class="card-header py-3">'
            '<h6 class="m-0 font-weight-bold text-primary text-center">' +
            titulo + '</h6>')

        if not adm == None:
            evento += (
                '<div class="dropdown no-arrow float-right">'
                '<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">'
                '<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>'
                '</a>'
                '<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">'
                '<div class="dropdown-header">Menu de administrador:</div>'
                '<a class="dropdown-item" id="' + str(eventoId) +
                '" onclick="publicar(this)">Publico=' + publicado + '</a>'
                '<a class="dropdown-item" id="' + str(eventoId) +
                '" onclick="concluir(this)">Concluido=' + concluido + '</a>'
                '</div>'
                '</div>')

        evento += ('</div>' '<div class="card-body pb-2 mb-1">')
        if (imagem > ''):
            evento += (
                '<div class="text-center ">'
                '<img class="img-fluid px-3 px-sm-4 mt-3 mb-4 " style="width: 25rem;" src="'
                + imagem + '" alt="">'
                '</div>')

        evento += ('<div class="card py-3 border-bottom-primary">'
                   '<div class="card-body pb-0 pt-0">'
                   '<p class="mb-0 pb-0 mt-0">' + descricao + '</p>'
                   '</div>'
                   '</div>'
                   '</div>'
                   '<div class="card-footer pb-0 pt-3 mt-0 text-center">'
                   '<div class="btn-group mb-0" role="group">'
                   '<p  class="btn btn-success btn-icon-split">'
                   '<span class="icon text-white-50">' + str(pontos) +
                   '</span>'
                   '<span class="text">Pontos</span>'
                   '</p>')

        if (vagas > 0):
            evento += ('<p  class="btn btn-warning btn-icon-split ml-1">'
                       '<span class="icon text-white-50">' +
                       str(vagas - inscricoes) + '</span>'
                       '<span class="text">Vagas</span>'
                       '</p>')

        evento += ('<p  class="btn btn-primary btn-icon-split ml-1">'
                   '<span class="icon text-white-50">' +
                   momentoExecucao.strftime("%d/%m") + '</span>'
                   '<span class="text">' + momentoExecucao.strftime("%H") +
                   'h</span>'
                   '</p>'
                   '</div>'
                   '<div class="mt-0">')
        if (vagas > 0):
            evento += ('<p  class="btn btn-primary btn-icon-split ml-1">'
                       '<span class="icon text-white-50">'
                       'Incrições até'
                       '</span>'
                       '<span class="text">' +
                       momentoFimInscricao.strftime("%d/%m") + '</span>'
                       '</p>')

        if (vagas > 0):

            if (usuariosInscritos != None) and (usuarioAtivo
                                                in usuariosInscritos):
                evento += (
                    '<p  class="btn btn-success btn-icon-split ml-1" id="' +
                    str(eventoId) + '" onclick="postInscreverse(this)" >'
                    '<span class="text">Inscrito</span>')
            else:
                evento += (
                    '<p  class="btn btn-danger btn-icon-split ml-1" id="' +
                    str(eventoId) + '" onclick="postInscreverse(this)" >'
                    '<span class="text">Inscrever-se</span>')

        evento += ('</p>' '</div>' '</div>' '</div>')

    return Markup(evento)