Agendamento de Consultas

18/07/2017

0

Boa tarde pessoal.

Estou tentando montar um pequeno agendamento para uma clinica de fisioterapia.
A exceção é que se atendem 3 pacientes no mesmo horario e o que tenho achado de exemplos é com somente 1 paciente.

Imaginei uma tela assim:

[img]http://i67.tinypic.com/2wgbuzb.jpg[/img]

Então eu teria que primeiramente listar os horarios.
Em seguida fazer uma busca na tabela para trazer todos os agendamentos e lincar eles atraves do dbgrid.

Preciso tbm achar uma forma de pintar os horarios, na cor verde(se ainda tem vaga disponivel) na cor vermelha (se o horario está lotado)

Alguém poderia me dar umas dicas?

Uso delphi 10.2 e componentes de acesso da paleta interbase.

Obrigado
Renan

Renan

Responder

Post mais votado

20/07/2017

Bro, ideia maneira, mas ai tipo, vc só quer mostrar a hora e se ela esta lotada ou não? depois quando clicar na hora que vai carregar os pacientes no grid do lado?

poderia fazer assim man, vou tentar jogar a ideia, ai qqr coisa vc adpta ao seu projeto.

> Query para horarios, Query para contagem e query para pacientes
> Grid simples ou dbgrid para os horarios, com o campodas horas e um campo vazio para cor
> quando clicar no calendario, vc abre o queryHorario carregando todos os horários possíveis.
> mete um While na queryCalendario, e cria uma function, que retorna um inteiro (vai ser o recordCount da sua queryContagem)

ai ficaria mais ou menos assim...
function RegistrosGrid( periodo : DateTime) : Integer; // DateTime, porque no grid vc vai mostrar só hora, mas no sql em si, vai carregar data e hora pra não dar conflito
begin
queryContagem.close
QueryContagem.Params('periodo').AsDateTime := periodo;
queryContagem.Open;

Result := qryContagem.Recordcount;
end;

essa é nossa funçao, agora vc vai continuar o processo.

> Dentro do While da QryHorario, vc vai fazer assim
while not qryHorario.EOF do
begin
gridHorario.lines.color := clGreen; // não lembro como pintar a célula, mas ai vc ja pinta de verde por padrão;
if RegistrosGrid(qryHorario.fieldbyname(data).asDateTime > 2 then
gridHorario.lines.color := clRed; // Aqui economiza validaçao com If Else, ele ja ta verde, se o resultado for maior que 2, ja pinta de vermelho.
end;

Aqui foi validado a cor do grid.

depois, quando a pessoa clicar no grid ( de preferencia doubleClick) vamos carregar a queryPacientes com os dados daquele horário/dia, que seria praticamente qryPaciente.sql.add(' SELECT * FROM SUA_TABELA WHERE DATA = ' + qryHorario.fieldbyname('data').asDateTime...

Se vc tem o campo como DateTime, não precisa ficar tratando horarios separados.

esse select ai, vc pode criar uma procedure pra abrir ele, e sempre que vc der o double click no grid de horario, ele abre essa procedure passando o parametro de DateTime.

caraaai, falei mt em haha

Espero ajudar maninho..

Bons Códigos!!

Roberto Wutke

Roberto Wutke
Responder

Mais Posts

19/07/2017

Robson Morais

Bom dia, procure sobre o TPlanner da TMS Software, ele tem um schedule que você monta agenda, o visual é muito bom.
Responder

19/07/2017

Renan

Bom dia amigo. Obrigado pela resposta.
Já dei uma olhada, mas não quero me prender a componentes de terceiros.
Gostaria de usar componentes nativos e fazer uma tela semelhante a que postei

Um colega me montou essa SQL, que faz o select e conta quantos pacientes tenho por horario

SELECT DATA, HORA, COD_PACIENTE, COD_PROCEDIMENTO, 
  (SELECT COUNT(*) FROM AGENDA B WHERE B.HORA = A.HORA AND B.DATA = A.DATA) AS QT_TOTAL 
FROM AGENDA A 


Agora, só preciso achar uma forma de carregar os horários em algum componente, para que os mesmos sejam pintados de acordo com:

if recordcount > 2 then
cor vermelha
else
cor verde

Daí, ao clicar em cada horario, um select busca os pacientes que tem marcados e mostra no dbgrid.

Como pode ver está praticamente tudo ok, só não sei como carregar os horarios e pintar eles.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar