Problema intervalo entre datas com criteria
02/10/2014 09:56
0
Ola Galera nao sei se alguem ja passou por isso mais estou com um problema bem chato com between do criteria. a situacao é a segunda preciso saber sea data inicio e data fim de um evento ja cadastrado esta dentro de um intervalo de tempo de um evento que quer ser cadastrado eu estava usando esse Criteria mas..

def criteria = Agendamento.createCriteria()
def results = criteria.list() {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacao', inicio, fim)

or {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacaoFinal', inicio, fim)
}

}


Com ele nao esta retornando tudo que preciso exemplo, tenho 1 funcionario que trabalha da 12 as 14 e o evento que ele faz demora 45 minutos, logo os horarios pre disponiveis dele seriam 12:00 12:45 13:30, e no msm dia ele tem 2 eventos ja marcados 1 das 12:00 as 12:45 e 1 das 13:00 as 13:45 esse criteria esta em 1 if que tem o mapa das dos horarios pre disponiveis, o problema é ele deveria retornar 1 resultado em cada loop pq no primeiro o horario é igual o segundo horario marcado é das 13 as 13 :45 que fika entre o das 12:45 as 13:30 e o das 13:30 em diante problema que qnd o loop da a data inicio 12:45 as 13:30 ele nao axa o resultado que deveria retornar que eh das 13:00 as 13:45

nao sei se expliquei bem alguem pode me ajuda com iss? vlw
Tags: criteria,database,grails


0

def criteria = Agendamento.createCriteria()
def results = criteria.list() {
or {
and {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacao', inicio, fim)
}
and {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacaoFinal', inicio, fim)
}
}
}


Acho que isso resolve seu problema, desculpe a identação, mas nesse editor aqui é chato de fazer.
06/10/2014 08:54


0
hammm nao funciona não!!! com isso ele nao retorna nada ate por que bem se eu entendi direito nessa condicao que vc enviou teria que ter as 2 condicoes na verdade ele tem que entra em so uma por isso o or!!!! na solucao que tenho ele ainda continua retornando 13:30 que fika entre o horario marcado que é das 13:00 as 13:45 nao sei se é pq no loop anterior ele retorna o msm resultado pq no loop anterior é das 12:45 as 13:30
:/
06/10/2014 12:00


0
alias ele nao retorna no caso das 13:30 ele deveria retornar o mesmo que retorna na volta do loop anterior pra simplificar é isso

 def listaFinal = []
listaValidacao.each {
def inicio = it.inicio
def fim = it.fim

def criteria = Agendamento.createCriteria()
def results = criteria.list() {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacao', inicio, fim)

or {
eq('dataValidacao', data)
eq('profissional', profissional[0])
ne('horaValidacaoFinal', inicio)
ne('horaValidacao', fim)
between('horaValidacaoFinal', inicio, fim)
}

}


se ele nao retornar nada ou seja a lista estiver vazia ele o horario esta livre se ele retornar algo o horario esta ocupado
06/10/2014 12:03



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