Ir para conteúdo
Fórum Script Brasil
  • 0

Gerar horario Agenda anual


claytonprog

Pergunta

Olá Pessoal!

Estou com um problema aqui!

É o seguinte: Tenho uma rotina que gera horarios para uma agenda médica, porém essa rotina gera o horario apenas para um dia. Eu queria que geração os horários para todos os dias do ano.

Segue abaixo a rotina que puder me ajudar implementando ficaria bastante agradecido.

<?

include "conexao.php";


 if(isset($_POST['submit'])) { 
     
 $dia = str_replace("'","",$_POST['dia']);
 $mes = str_replace("'","",$_POST['mes']);
 $ano = str_replace("'","",$_POST['ano']);
 $data_cadastro = $ano."-".$mes."-".$dia;

     
 $hora_inicio = "07:45:00";
 $hora_final = "19:00:00";
                   

$ini = strtotime($hora_inicio);
$fim = strtotime($hora_final);

$atu = $ini;

$i = 0;
for ($atu = $ini; $atu < $fim; $atu = strtotime('+15 minutes', $atu)) {

$hora = date('H:i', $atu);

                                   
            $sql = mysql_query("INSERT INTO agenda (id_agenda,hora,dia,mes,ano) VALUES('','$hora','$dia','$mes','$ano')");
              
            $msg = 'Agenda Aberta do dia '  .$data_cadastro.  ' com Successo<br/>';
                    
                             
}
}

?>

Link para o comentário
Compartilhar em outros sites

24 respostass a esta questão

Posts Recomendados

  • 0

Salve,

Segue um exemplo perdido aqui no meio dos scripts

<?php
/*
CREATE TABLE agenda
(
    data DATE NOT NULL,
    inicio TIME NOT NULL,
    termino TIME NOT NULL,
    constraint pk_agenda primary key(data, inicio, termino)
)
ENGINE = INNODB;
*/
$dataInicio = '2010-01-01';
$proximoAno = date('Y') + 1;
echo "<pre>\r\n";
do
{
    list( $ano, $mes, $dia ) = explode('-', $dataInicio);
    echo "INSERT INTO agenda(data, inicio, termino) VALUES ('$dataInicio', '07:45:00', '19:00:00')\r\n";
    $dataInicio = date('Y-m-d', mktime(0, 0, 0, $mes, $dia + 1, $ano));
}
while( date('Y') == date('Y', strtotime($dataInicio)) );
echo "\r\n</pre>";

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

OIpa, agora compreendi seu problema...

segue o codigo abaixo

<?php
$dataInicio = '2010-01-01';
$intervalo  = 15;
echo "<pre>\r\n";

do
{
    list( $ano, $mes, $dia ) = explode('-', $dataInicio);
    $inicio = '07:45:00';
    $final  = '19:00:00';
    do
    {
        list($hora, $minuto, $segundo ) = explode(':', $inicio);
        echo "INSERT INTO agenda (hora,dia,mes,ano) VALUES('$inicio','$dia','$mes','$ano')\r\n";
        $inicio = date("H:i:s", mktime($hora, $minuto + $intervalo, $segundo, $mes, $dia, $ano ) );
    }
    while( $inicio <= $final );
    $dataInicio = date('Y-m-d', mktime(0, 0, 0, $mes, $dia + 1, $ano));
    echo "\r\n";
}while( date('Y') == date('Y', strtotime($dataInicio)) );

echo "\r\n</pre>";

Veja se é isso ai

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal,

Também estou montando uma agenda médica.

Estou tentando fazer assim:

Tabela: TipoAgenda

Guarda o intervalo de horário de cada médico de cada dia da semana. Ex.: 08:00 - 09:00.

Tabela: AgendaConsultas

Guarda os agendamentos.

O funcionamento seria assim:

Quando selecionar o dia da semana para fazer o agendamento do paciente, o sistema pega o intervalo de horário dentro de TipoAgenda e monta uma grade de 15 em 15 minutos, assim:

08:00

08:15

08:30

09:00

E quando o atendente agendar algum paciente, o sistema dá um select na tabela AgendaConsultas mostrará na grade o nome do paciente, assim:

08:00

08:15 Paciente A

08:30

09:00 Paciente B

Até aí tudo bem. Porém, estou com algumas dificuldades, que são:

- Agendamentos podem ser feitos qualquer horário mesmo fora da grade e com encaixe: 07:30, 08:10 e assim por diante. Quando acontece esse encaixe é que meu problema começa, pois não consigo uma maneira de mostrá-lo na grade.

@claytonprog

Percebi que você vai trabalhar com a grade de horários direto no banco.

Minha idéia inicial seria manter no banco só os agendamentos que realmente foram feitos, e horários vagos não ficariam na tabela.

Será que é melhor trabalhar com sua linha de raciocínio? Gravando tudo na tabela?!?!?

Link para o comentário
Compartilhar em outros sites

  • 0

Para inserir o encaixe está tudo certo né? Então, para mostrar, basta colocar um if dentro do loop que gera os horários de 15 em 15 minutos para verificar se existe algum registro no banco nos 14 minutos anteriores, tipo, por exemplo:

for($i de 00:00 a 24:00 com $i variando de 00:15)
  if($i-00:15 < $data_registo < $i)
  {
    echo $data_registro e $registro
  }
  if($data_registro == $i)
  {
    echo $data_registro e $registro
  }
  else
  {
    if($inicio_intervalo <= $i <= $fim_intervalo)
      echo $data_registro
    }
  }
}

Editado por svjets
Link para o comentário
Compartilhar em outros sites

  • 0

@svjets

Obrigado pela atenção.

Talvez eu não tenha entendido sua lógica ou você não entendeu o que eu quero fazer.

Vou simplificar.

Tenho um array chamado grade.

Grade:

Array ( [0] => 08:00 [1] => 08:15 [2] => 08:30 [3] => 08:45 [4] => 09:00 )

E tenho outro array chamado agenda.

Agenda:

HORA - PACIENTE

08:10 - TESTE

08:15 - TESTE 1

08:30 - TESTE 2

Quando imprimo o array GRADE ele me retorna como abaixo, o que seriam horários vagos:

08:00

08:15

08:30

08:45

09:00

Agora o que preciso fazer é percorrer o array GRADE e testar se o horário de AGENDA é igual da GRADE, se for imprimi o horário e o paciente da AGENDA, se não for igual imprimi o horário da GRADE, e caso haja horário na AGENDA que não seja igual da GRADE (encaixe) ele imprima na ordem correta.

Não sei se consegui explicar mais claramente.

Obrigado desde já.

Link para o comentário
Compartilhar em outros sites

  • 0

Segue abaixo:

Tabela AgendaConsultas

AutoId            int
Paciente            int
Medico            int
Usuario          int
LocalAtend     int
Data                    smalldatetime
Hora                    varchar(5)
Compareceu    bit
Atrasado            bit
Atendido            bit
Retorno            bit
Exame            bit
Cirurgia            bit
TelNum            varchar(9)
TelDdd            varchar(2)
Complemento    varchar(255)
Convenio            int

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal desculpem a demora, mas estava meio ocupado ultimamente.

@svjets

Entendi sua lógica, mas não consegui aplicar no meu caso.

O que preciso é aplicar essa lógica nesses 2 arrays (strings), utilizando PHP:

Array GRADE:

Chave: 0 - Grade: 08:00

Chave: 1 - Grade: 08:15

Chave: 2 - Grade: 08:30

Chave: 3 - Grade: 08:45

Chave: 4 - Grade: 09:00

Array HORA:

Chave: 0 - Hora: 07:30

Chave: 1 - Hora: 08:00

Chave: 2 - Hora: 08:10

Chave: 3 - Hora: 08:30

Chave: 4 - Hora: 09:00

Chave: 5 - Hora: 10:00

Grade são horários pré-definidos.

Hora são os agendamentos das consultas.

Agradeço a colaboração.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara este código provavelmente poderia ser mais simplificado, mas fui fazendo e saiu isso aí, heheh:

<?php
//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//while para percorrer todo array grade pois poderíamos não saber qual é o tamanho dele
$i=0;
while($grade[$i])
{
//sepra a hora e os minutos da grade em 2 arrays diferentes
  list($grade_hora[$i],$grade_minuto[$i]) = explode(":",$grade[$i]);
  $i++;
}
$delta = abs($grade_minuto[0] - $grade_minuto[1]);

//while para percorrer todo array hora pois poderíamos não saber qual é o tamanho dele
$j=0;
while($hora[$j])
{
//separa a hora e os minutos da grade em 2 arrays diferentes
  list($hora_hora[$j],$hora_minuto[$j]) = explode(":",$hora[$j]);
  $j++;
}

//for para percorrer as 24 horas
$m=0;
$q=0;
for($k=0;$k<24;$k++)
{
//for para percorrer delta minutos
  for($l=0;$l<60;$l+=$delta)
  {
//teste para verificar se o horario atual pertence a grade ou se existe pacientes para os proximos delta minutos
    $ctrl=false;
    for($p=$q;$p<$i;$p++)
    {
      if($grade_hora[$p] == $k AND $grade_minuto[$p] == $l)
      {
        if($q == 0)
        {
          echo "------INÍCIO DO HORÁRIO NORMAL------\n<br />";
        }
        echo $grade_hora[$p].":".$grade_minuto[$p];
        $q++;
        $p = $i;
        $ctrl=true;
      }
        if($q == $i AND $m == $j)
        {
          echo "\n<br />------FIM DO HORÁRIO NORMAL------\n<br />";
        }
    }

    for($n=$m;$n<$j;$n++)
    {
      $minant = $l + $delta - 1;
      if($hora_hora[$n] == $k AND $hora_minuto[$n] == $l)
      {
        if(!$ctrl)
       {
          echo $hora_hora[$n].":".$hora_minuto[$n];
          $ctrl=true;
       }
        echo " - ".$paciente[$n];
        if($q ==  0 OR $q >= $i)
        {
          echo "\n<br />";
        }
        if($q == $i)
        {
          echo "------FIM DO HORÁRIO NORMAL------\n<br />";
          $q++;
        }
        $m++;
      }
      if($hora_hora[$n] == $k AND $hora_minuto[$n] > $l AND $hora_minuto[$n] <= $minant)
      {
        echo "\n<br />".$hora_hora[$n].":".$hora_minuto[$n]." - ".$paciente[$n];
        $m++;
      }
    }
    if($q > 0 AND $q <= $i AND $ctrl)
    {
      echo "\n<br />";
    }
  }
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Opa!!! Desculpe a demora, é que estava de férias.

Executei seu código aqui e deu uns erros que já acertei. O problema estava em 2 WHILES.

Onde está de negrito foi a mudança. Ficou assim:

//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//while para percorrer todo array grade pois poderíamos não saber qual é o tamanho dele
$i=0;
[b]$tg = count($grade);
$th = count($hora);[/b]
[b]while($i < $tg)[/b]
{
//sepra a hora e os minutos da grade em 2 arrays diferentes
  list($grade_hora[$i],$grade_minuto[$i]) = explode(":",$grade[$i]);
  $i++;
}
$delta = abs($grade_minuto[0] - $grade_minuto[1]);

//while para percorrer todo array hora pois poderíamos não saber qual é o tamanho dele
$j=0;
[b]while($j<$th)[/b]
{
//separa a hora e os minutos da grade em 2 arrays diferentes
  list($hora_hora[$j],$hora_minuto[$j]) = explode(":",$hora[$j]);
  $j++;
}

//for para percorrer as 24 horas
$m=0;
$q=0;
for($k=0;$k<24;$k++)
{
//for para percorrer delta minutos
  for($l=0;$l<60;$l+=$delta)
  {
//teste para verificar se o horario atual pertence a grade ou se existe pacientes para os proximos delta minutos
    $ctrl=false;
    for($p=$q;$p<$i;$p++)
    {
      if($grade_hora[$p] == $k AND $grade_minuto[$p] == $l)
      {
        if($q == 0)
        {
          //echo "------INÍCIO DO HORÁRIO NORMAL------\n<br />";
        }
        echo $grade_hora[$p].":".$grade_minuto[$p];
        $q++;
        $p = $i;
        $ctrl=true;
      }
        if($q == $i AND $m == $j)
        {
          //echo "\n<br />------FIM DO HORÁRIO NORMAL------\n<br />";
        }
    }

    for($n=$m;$n<$j;$n++)
    {
      $minant = $l + $delta - 1;
      if($hora_hora[$n] == $k AND $hora_minuto[$n] == $l)
      {
        if(!$ctrl)
       {
          echo $hora_hora[$n].":".$hora_minuto[$n];
          $ctrl=true;
       }
        echo " - ".$paciente[$n];
        if($q ==  0 OR $q >= $i)
        {
          echo "\n<br />";
        }
        if($q == $i)
        {
          //echo "------FIM DO HORÁRIO NORMAL------\n<br />";
          $q++;
        }
        $m++;
      }
      if($hora_hora[$n] == $k AND $hora_minuto[$n] > $l AND $hora_minuto[$n] <= $minant)
      {
        echo "\n<br />".$hora_hora[$n].":".$hora_minuto[$n]." - ".$paciente[$n];
        $m++;
      }
    }
    if($q > 0 AND $q <= $i AND $ctrl)
    {
      echo "\n<br />";
    }
  }
}

Show de bola!!!!

Agora vou adaptar à minha realidade.

Logo, logo de dou um parecer. Obrigado por enquanto.

Link para o comentário
Compartilhar em outros sites

  • 0

Segue o código.

//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//while para percorrer todo array grade pois poderíamos não saber qual é o tamanho dele

$i=0;
$tg = count($grade);
$th = count($hora);
while($i < $tg)
{
//sepra a hora e os minutos da grade em 2 arrays diferentes
  list($grade_hora[$i],$grade_minuto[$i]) = explode(":",$grade[$i]);
  $i++;
}
$delta = abs($grade_minuto[0] - $grade_minuto[1]);

//while para percorrer todo array hora pois poderíamos não saber qual é o tamanho dele
$j=0;
while($j<$th)
{
//separa a hora e os minutos da grade em 2 arrays diferentes
  list($hora_hora[$j],$hora_minuto[$j]) = explode(":",$hora[$j]);
  $j++;
}

//for para percorrer as 24 horas
$m=0;
$q=0;
for($k=0;$k<24;$k++)
{
    //for para percorrer delta minutos
    for($l=0;$l<60;$l+=$delta)
    {
        //teste para verificar se o horario atual pertence a grade ou se existe pacientes para os proximos delta minutos
        $ctrl=false;
        for($p=$q;$p<$i;$p++)
        {
            if($grade_hora[$p] == $k AND $grade_minuto[$p] == $l)
            {

                if($q == 0)
                {
                    //echo "------INÍCIO DO HORÁRIO NORMAL------\n<br />";
                }
                echo "\n<tr><td>x</td><td>".$grade_hora[$p].":".$grade_minuto[$p]."</td>";
                
                $q++;
                $p = $i;
                $ctrl=true;
            }
            
            if($q == $i AND $m == $j)
            {                
                //echo "\n<br />------FIM DO HORÁRIO NORMAL------\n<br />";
            } 
            
        }//fecha for 

        for($n=$m;$n<$j;$n++)
        {
            $minant = $l + $delta - 1;

            if($hora_hora[$n] == $k AND $hora_minuto[$n] == $l)
            {
                if(!$ctrl)
                {
                    echo "\n<tr><td>@</td><td>".$hora_hora[$n].":".$hora_minuto[$n]."</td>";
                    $ctrl=true;
                } 
                    echo "<td>".$paciente[$n]."</td><td>".$tel[$n]."</td>";
                
                if($q ==  0 OR $q >= $i)
                {
                    echo "</tr>";
                }
                if($q == $i)
                {
                    $q++;
                }
                $m++;
            }
            
            
            if($hora_hora[$n] == $k AND $hora_minuto[$n] > $l AND $hora_minuto[$n] <= $minant)
            {
                echo "</tr>\n<tr><td>Z</td><td>".$hora_hora[$n].":".$hora_minuto[$n]."</td><td>#".$paciente[$n]."</td>"."<td>".$tel[$n]."</td>";
                $m++;
            }
        }//fecha for 
        if($q > 0 AND $q <= $i AND $ctrl)
        {
            echo "</tr>";
        } 
        
    }//fecha for
}//fecha for

A tabela tem 4 colunas. O problema está quando não tem agendamento no horário, eu preciso imprimir duas colunas em branco depois da coluna de hora.

Link para o comentário
Compartilhar em outros sites

  • 0
<?php
echo "<table border=\"1px\">";
//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//while para percorrer todo array grade pois poderíamos não saber qual é o tamanho dele

$i=0;
$tg = count($grade);
$th = count($hora);
while($i < $tg)
{
//sepra a hora e os minutos da grade em 2 arrays diferentes
  list($grade_hora[$i],$grade_minuto[$i]) = explode(":",$grade[$i]);
  $i++;
}
$delta = abs($grade_minuto[0] - $grade_minuto[1]);

//while para percorrer todo array hora pois poderíamos não saber qual é o tamanho dele
$j=0;
while($j<$th)
{
//separa a hora e os minutos da grade em 2 arrays diferentes
  list($hora_hora[$j],$hora_minuto[$j]) = explode(":",$hora[$j]);
  $j++;
}

//for para percorrer as 24 horas
$m=0;
$q=0;
for($k=0;$k<24;$k++)
{
    //for para percorrer delta minutos
    for($l=0;$l<60;$l+=$delta)
    {
        //teste para verificar se o horario atual pertence a grade ou se existe pacientes para os proximos delta minutos
        $ctrl=false;
        for($p=$q;$p<$i;$p++)
        {
            if($grade_hora[$p] == $k AND $grade_minuto[$p] == $l)
            {

                if($q == 0)
                {
                    //echo "------INÍCIO DO HORÁRIO NORMAL------\n<br />";
                }
                echo "\n<tr><td>x</td><td>".$grade_hora[$p].":".$grade_minuto[$p]."</td>";
                
                $q++;
                $p = $i;
                $ctrl=true;
                $ctrl2=true;
            }
            
            if($q == $i AND $m == $j)
            {                
                //echo "\n<br />------FIM DO HORÁRIO NORMAL------\n<br />";
            }
            
        }//fecha for

        for($n=$m;$n<$j;$n++)
        {
            $minant = $l + $delta - 1;

            if($hora_hora[$n] == $k AND $hora_minuto[$n] == $l)
            {
                if(!$ctrl)
                {
                    echo "\n<tr><td>@</td><td>".$hora_hora[$n].":".$hora_minuto[$n]."</td>";
                    $ctrl=true;
                }
                    echo "<td>".$paciente[$n]."</td><td>".$tel[$n]."</td>";
                
                if($q ==  0 OR $q >= $i)
                {
                    echo "</tr>";
                }
                if($q == $i)
                {
                    $q++;
                }
                $m++;
                $ctrl2=false;
            }
            
            
            if($hora_hora[$n] == $k AND $hora_minuto[$n] > $l AND $hora_minuto[$n] <= $minant)
            {
                echo "</tr>\n<tr><td>Z</td><td>".$hora_hora[$n].":".$hora_minuto[$n]."</td><td>#".$paciente[$n]."</td>"."<td>".$tel[$n]."</td>";
                $m++;
                $ctrl2=false;
            }
        }//fecha for
        if($q > 0 AND $q <= $i AND $ctrl)
        {
            if($ctrl2)
            {
                echo "<td>sem paciente</td><td>sem telefone</td>";
                $ctrl2=false;
            }
            echo "</tr>";
        }
        
    }//fecha for
}//fecha for
echo "</table>";
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Era o que tava escrevendo agora, muito mais simples com foreach:

<?php
//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//cria a lista da grade
foreach($grade as $value)
{
  $lista[$value]="sem paciente";
}

//insere os horários marcados
foreach($paciente as $key => $value)
{
  $lista[$hora[$key]]=$value;
}

//ordena o array pelos horários
ksort($lista);

//cria a tabela
echo "<table border=\"1px\">";
foreach($lista as $key => $value)
{
  echo "<tr><td>$key</td><td>$value</td><td>(espaço para o telefone)</td></tr>";
}
echo "</table>";
?>

Bem mais simples, não? heheh

Link para o comentário
Compartilhar em outros sites

  • 0

No código com foreach seria assim:

<?php
//grade do médico
$grade = array("08:00","08:15","08:30","08:45","09:00");

//hora das consultas marcadas
$hora = array("07:30","08:00","08:10","08:30","09:00","10:00");

//paciente das consultas marcadas
$paciente = array("Agueltúrcio","Bunesvaldo","Cledivandro","Dorinelson","Enislênio","Fidusotro");

//telefone dos pacientes
$telefone = array("9999-9999","8888-8888","7777-7777","6666-6666","5555-5555","4444-4444");

//cria a lista da grade
foreach($grade as $value)
{
  $lista[$value]="sem paciente";
  $tel[$value]="-";
}

//insere os horários marcados
foreach($paciente as $key => $value)
{
  $lista[$hora[$key]]=$value;
  $tel[$hora[$key]]=$telefone[$key];
}

//ordena os arrays pelos horários
ksort($lista);
ksort($tel);

//cria a tabela
echo "<table border=\"1px\">";
foreach($lista as $key => $value)
{
  echo "<tr><td>$key</td><td>$value</td><td>$tel[$key]</td></tr>";
}
echo "</table>";
?>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...