Relatório por período
17/03/2016 16:34
0
Olá pessoal, tenho um projeto onde devo cadastrar diversasocorrências diariamente. Preciso gerar relatórios dessas ocorrências registradas.
Como faço para filtrar esse relatório por período:
Exemplo: gostaria de gerar relatório das ocorrências doperíodo 10/10/2016   até 10/11/2016
 
Abaixo esta meu controlador do relatório. Sem nenhum filtro.
 
@Transactional(readOnly = true)
 
class RelatoriosController {
 
    def index() {
     render (view:"index")
 }
 def createReport2 = {
   
        def busca =Ocorrencia.getAll();
        println"dados busca = "+busca.dataoco
  
           def teste =Ocorrencia.executeQuery("select infrator, violacao, dataoco, localo from
Ocorrencia");
     
        Map result =[:]
        result.data =[]
        busca.each{
            
            
           result.data<< [cadastrooco:it.cadastrooco, localo:it.localo,
denunciante:it.denunciante, dataoco:it.dataoco,
infrator:it.infrator,violacao:it.violacao, nomecr:it.crianca,
nomeco:it.conselheiro]
            params.max = Math.min(params.max ? params.int('max') : 100, 100)                     
               
        }
        printlnresult.data
       chain(controller:'jasper',action:'index',model:[data:result.data],params:params)
    }
}




alguém poderia me exemplificar como devo alterar esse contrller?
abçs.
Tags: Grails relatorio por período


0
Olá, Arlindo.

Sugiro dar uma olhada no "Criteria Builder" do Hibernate. É bem interessante e as projections também te ajudam na hora de fazer algumas contas. 
Veja nesse link sobre createCriteria?

mas utilizando seu caso como exemplo, vai precisar mudar a linha 

def teste =Ocorrencia.executeQuery("select infrator, violacao, dataoco, localo from Ocorrencia");


acrescentando a sua condição (WHERE) de data entre dataMinima e dataMaxima.

Deve ficar mais ou menos assim:
 
def teste =Ocorrencia.executeQuery("select infrator, violacao, dataoco, localo from Ocorrencia  where dataoco>=:dataMinima and dataoco<= :dataMaxima", [dataMinima:params.dataMinima, dataMaxima:params.dataMaxima]);


você provavelmente terá que dar um parse nas datas que vai receber como parâmetro e também criar uma validação para que "se não tiver data, liste tudo", então a linha exatamente como está acima não vai funcionar, mas é o conceito. 

[font=Consolas, Liberation Mono, Courier, monospace][color=#333333]def dataMinima =[code]params.date('dataMinima', 'dd-MM-yyyy')?:[code]new Date().parse("yyyy/MM/dd", "2016/01/01")

def dataMaxima =
params.date('dataMaxima', 'dd-MM-yyyy')?:[code]new Date().parse("yyyy/MM/dd", "2099/12/31")
[/code]
[/code]
acrescentando isso antes da sua linha "teste", não vai mais precisar dos "params." dentro dos criterios de filtro.
[/code][/color][/font]
17/03/2016 18:05


0
Vish ficou bugado
17/03/2016 18:07


0
Cara,

to bem desatualizado do Grails mas acho que posso te ajudar a simplificar sua vida. 

primeiro eu usaria withCriteria. 
Exemplo:
 def ocorrenciaCriteria = Ocorrencia.withCriteria {
def date1 = new Date('10/10/2016')
?def date2 = new Date('10/11/2016')
between('dataoco', date1, date2)

chain(controller:'jasper',action:'index',model:[data:ocorrenciaCriteria ],params:params)


Assim meu amigo, você tem seu resultado como você deseja. Passando a criteria pro data do Jasper ele jã vai entender que, caso no relatório os campos estejam com o mesmo nome que sua classe Ocorrencia tem (dataoco, violacao...etc), que é para montar com os valores correspondentes. 

sacou ?


0
Faltou fechar chave depois do between 

 def ocorrenciaCriteria = Ocorrencia.withCriteria {
def date1 = new Date('10/10/2016')
?def date2 = new Date('10/11/2016')
between('dataoco', date1, date2)
}

chain(controller:'jasper',action:'index',model:[data:ocorrenciaCriteria ],params:params)



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto