def eventos_lista(request):
    '''
      @eventos: view para listar as eventos cadastradas no sistema
    '''
    dados = menu_lateral()
    ordem = request.GET.get('ordem')

    eventos = Evento.objects.filter(status='2')

    if ordem == 'alpha':
        eventos_list = eventos.order_by('titulo')
    elif ordem == 'data':
        eventos_list = eventos.order_by('-criado_em')
    elif ordem == 'rate':
        eventos_list = eventos.order_by('-rating')
    else:
        eventos_list = eventos.order_by('-criado_em')

    paginator = Paginator(eventos_list, 6)  # exibe 6  por pagina
    page1 = request.GET.get('pg')

    try:
        eventos = paginator.page(page1)
    except PageNotAnInteger:
        eventos = paginator.page(1)
    except EmptyPage:
        eventos = paginator.page(paginator.num_pages)

    evento = {'eventos': eventos,
              'total_eventos': len(eventos_list),
              'ordem': ordem}

    evento.update(dados)
    return render(request, 'eventos_lista.html', evento)
def galeria_visualizar(request,tipo,id_galeria):
    '''
      @galeria_lista: view para listar as galerias cadastradas no sistema 
    '''
    dados = menu_lateral()
    

    if tipo == 'evento':
        evento = Evento.objects.get(id=id_galeria)
        tags_cont = evento.tags.count
        album = {'titulo':evento.titulo,'tipo':'evento','data':evento.criado_em,'origem':evento,'id':evento.id}
        fotos_list = evento.fotos_evento.all()

    else:
        galeria = Galeria.objects.get(id=id_galeria)
        tags_cont = galeria.tags.count 
        album = {'titulo':galeria.titulo,'tipo':'galeria','data':galeria.criado_em,'origem':galeria,'id':galeria.id}
        fotos_list = galeria.fotos_galeria.all()

    
    paginator = Paginator(fotos_list , 16) # exibe 16  por pagina
    page1 = request.GET.get('pg')

    try:            
        fotos = paginator.page(page1)
    except PageNotAnInteger:
        fotos = paginator.page(1)
    except EmptyPage:
        fotos = paginator.page(paginator.num_pages)

   
    
    return render(request, 'galeria_visualizar.html',{'fotos':fotos,'galeria':album})    
def busca_site(request):
    '''
        @busca_site: View para renderizar a página inicial do site.
                      A Busca será feita por relevancia, buscando pelo Titulo depois pelo Texto
    '''
    dados = menu_lateral()
    try:
        query = request.GET.get('query').replace('+',' ')
    
        resultado_titulo = Evento.objects.filter(titulo__icontains=query,status='2').order_by('titulo')
        try:
            tag = Tag.objects.get(nome=query.upper())
            resultado_tags = tag.tags_evento.all().order_by('titulo').exclude(id__in=resultado_titulo)
        except:
            resultado_tags = []
        resultado_texto = Evento.objects.filter(texto__icontains=query,status='2').order_by('-criado_em').exclude(id__in=resultado_titulo).exclude(id__in=resultado_tags)
        resultado_geral = list(itertools.chain(resultado_titulo,resultado_tags,resultado_texto))
    except:
        query = request.GET.get('tag').replace('+',' ')

        tag = Tag.objects.get(nome=query.upper())
        resultado_geral = tag.tags_evento.all().order_by('titulo')


    resultado_lista = []
    if len(resultado_geral) > 0:
        for evento in resultado_geral:
            e_dict = {}
            e_dict['id'] = evento.id
            e_dict['titulo'] = evento.titulo
            e_dict['autor'] = evento.autor
            e_dict['texto'] = evento.texto
            e_dict['criado_em'] = evento.criado_em
            e_dict['foto'] = evento.foto
            resultado_lista.append(e_dict)

        paginator = Paginator(resultado_lista, 6) # exibe 6  por pagina
        page1 = request.GET.get('pg')

        try:            
            resultados = paginator.page(page1)
        except PageNotAnInteger:
            resultados = paginator.page(1)
        except EmptyPage:
            resultados = paginator.page(paginator.num_pages)

    busca = {'eventos':resultados,'total_eventos':len(resultado_lista),'query':query}
    busca.update(dados)
    return render(request,"busca.html",busca)
def galeria_lista(request):
    '''
      @galeria_lista: view para listar as galerias cadastradas no sistema 
    '''
    dados = menu_lateral()
    try:
        query = request.GET.get('tag').replace('+',' ')
        tag = Tag.objects.get(nome=query.upper())
        eventos = tag.tags_evento.all().order_by('titulo')
        galerias = tag.tags_galeria.all().order_by('titulo')
    except:
        query = ""
        eventos = Evento.objects.all().order_by('-criado_em')    
        galerias = Galeria.objects.all().order_by('-criado_em')

    galeria_list = []

    for evento in eventos:
        if evento.foto or evento.fotos_evento.all():
            album = {'titulo':evento.titulo,'tipo':'evento','data':evento.criado_em,'origem':evento,'id':evento.id}
            galeria_list.append(album)    

    for galeria in galerias:
        if galeria.fotos_galeria.all():
            album = {'titulo':galeria.titulo,'tipo':'galeria','data':galeria.criado_em,'origem':galeria,'id':galeria.id}
            galeria_list.append(album)

    galeria_list_ordem = sorted(galeria_list, key=lambda k: k['data'],reverse=True)
     
    paginator = Paginator(galeria_list_ordem , 16) # exibe 16  por pagina
    page1 = request.GET.get('pg')

    try:            
        galerias = paginator.page(page1)
    except PageNotAnInteger:
        galerias = paginator.page(1)
    except EmptyPage:
        galerias = paginator.page(paginator.num_pages)

    galeria = {'galerias': galerias,'total_galerias':len(galeria_list),'query':query}
    galeria.update(dados)
    return render(request, 'galeria_lista.html',galeria)