<?php
session_start();
require("../../database/dbConection.php");
require("../include/funcoes_gsaudereg.php");
$UsuarioLogado  = $_SESSION['idUsuarioLogado'];
$idPerfilLogado = $_SESSION['idPerfilLogado'];
$diaHoraHoje    = date("Y-m-d H:i");
# -- variáveis da listagem de vagas
$htmlRetorno          = "";
$codigoUnidadeHeader  = "";
$contadorUnidades     = 0;
$styleMarginTop       = "";
$setCorlinhaData      = "";
$dataAgendaCor        = "";
$contadorLinhasVagas  = 0;
$idGrupoProcedimento  = $_POST['idGrupoProcedimento'];
$arrayProcedimento    = $_POST['idProcedimento'];
$tipoVaga             = $_POST['tipoVaga'];

$contarProceimentos =  count($arrayProcedimento);
$calcularLoop       = 0;
$idProcedimento     = "";

for ($contaReg = 0; $contaReg < $contarProceimentos; $contaReg++){
  $idProcedimento = $idProcedimento == "" ? $arrayProcedimento[$contaReg] : $idProcedimento.",".$arrayProcedimento[$contaReg];
}

# -- carregar as unidades de referência -- #
$stmUnidadeReferencia = $rsConexao->prepare("SELECT codigo_estabelecimento_referencia FROM reg_tb_unidadereferencia WHERE codigo_estabelecimento_base='" . $_SESSION['unidadeLogada'] . "'");
$stmUnidadeReferencia ->execute();

# -- carregar informação para saber se a unidades deve respeitar cota -- #
$stmUnidadeRespeitaCota = $rsConexao->prepare("SELECT respeita_cota FROM tb_estabelecimento WHERE codigoestabelecimento_cnes='" . $_SESSION['unidadeLogada'] . "'");
$stmUnidadeRespeitaCota ->execute();
$rsUnidadeRespeitaCota      = $stmUnidadeRespeitaCota->fetch(PDO::FETCH_OBJ);
$unidadeLogadaRespeitaCota  = $rsUnidadeRespeitaCota->respeita_cota=="S" ? "SIM" : "NÃO";

if($stmUnidadeReferencia->rowCount()>0){
  $rsUnidadeReferencia  = $stmUnidadeReferencia->fetchAll(PDO::FETCH_ASSOC);
  $arrayUnidade   = $rsUnidadeReferencia;;
  $contarUnidade =  count($arrayUnidade);
  $idUnidadesReferencia = "";
  for ($contaReg = 0; $contaReg < $contarUnidade; $contaReg++){
    $idUnidadesReferencia = $idUnidadesReferencia == "" ? $arrayUnidade[$contaReg]['codigo_estabelecimento_referencia'] : $idUnidadesReferencia.",".$arrayUnidade[$contaReg]['codigo_estabelecimento_referencia'];
  }
}else{
  $idUnidadesReferencia = "00000";
}

#----- DEFINIR DATA PAGA VAGAS OCIOSAS -------#
$dataHoje = date("Y-m-d");
$dataHoje = DateTime::createFromFormat('Y-m-d', $dataHoje);
$dataHoje->add(new DateInterval('P6D'));
$dataVagaOciosa = $dataHoje->format('Y-m-d');
if($idPerfilLogado==11 || $idPerfilLogado==12){
  $whereOciosas = " AND (concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda,2,'0'),'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'))<='$dataVagaOciosa')";
}else{
  $whereOciosas = "";
}
#---------------------------------------------#


#----- DEFINIR DATA PAGA VAGAS OCIOSAS -------#
$dataHoje = date("Y-m-d");
$dataHoje = DateTime::createFromFormat('Y-m-d', $dataHoje);
$dataHoje->add(new DateInterval('P6D'));
$dataVagaOciosa = $dataHoje->format('Y-m-d');
if($idPerfilLogado==11 || $idPerfilLogado==12){
  $whereOciosas = " AND (concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda,2,'0'),'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'))<='$dataVagaOciosa')";
}else{
  $whereOciosas = "";
}
#---------------------------------------------#

#----- CARREGAR DADOS DOS PARÂMETROS DE AGENDAMENTO -------#
  $stmConfiguracoes	= $rsConexao->prepare("SELECT * FROM reg_tb_configuracoes");
  $stmConfiguracoes->execute();
  
  $rsConfiguracoes	= $stmConfiguracoes->fetch(PDO::FETCH_OBJ);
  $diasAberturaPrimeiraVez  = $rsConfiguracoes->diasabertura_pvez;
  $diasAberturaRetorno      = $rsConfiguracoes->diasabertura_retorno;
  $diasAberturaReserva      = $rsConfiguracoes->diasabertura_reserva;

  $data_original = date('Y-m-d');
  $data = new DateTime($data_original);
  $data->add(new DateInterval('P30D'));
  $data_atualizada = $data->format('Y-m-d');

  $dataHojeLimitacao  = date("Y-m-d");
  
  $geraDataLimitePVez = new DateTime($dataHojeLimitacao);
  $geraDataLimitePVez ->add(new DateInterval("P".$diasAberturaPrimeiraVez."D"));
  $dataLimitePVez     = $geraDataLimitePVez->format('Y-m-d');

  $geraDataLimiteRetorno = new DateTime($dataHojeLimitacao);
  $geraDataLimiteRetorno  ->add(new DateInterval("P".$diasAberturaRetorno."D"));
  $dataLimiteRetorno      = $geraDataLimiteRetorno->format('Y-m-d');
      

  $geraDataLimiteReserva = new DateTime($dataHojeLimitacao);
  $geraDataLimiteReserva  ->add(new DateInterval("P".$diasAberturaReserva."D"));
  $dataLimiteReserva      = $geraDataLimiteReserva->format('Y-m-d');
#----------------------------------------------------------#
switch($tipoVaga){
  case "PVez":
    $whareTipoVaga      = "AND (quantidadevagas_pvez-quantidadegendada_pvez)>0 ";
    $complementoSQLVagaDisponivel = " (reg_tb_agenda_sub.quantidadevagas_pvez-reg_tb_agenda_sub.quantidadegendada_pvez) AS vagasDiponiveis ";
    $whareTipoVagaDisponivel  = "AND (quantidadevagas_pvez!='' AND quantidadevagas_pvez IS NOT NULL) AND (quantidadevagas_pvez-quantidadegendada_pvez)>0 ";
    $whereLimitaDiasAbertura  = " AND (concat(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'))<='$dataLimitePVez') ";
    $descricaoVagasDiponiveis = "1ª Vez - disponível";
  break;
  case "reserva":
    $whareTipoVaga      = "AND (quantidadevagas_reserva-quantidadeagendada_reserva)>0 ";
    $complementoSQLVagaDisponivel = " (reg_tb_agenda_sub.quantidadevagas_reserva-reg_tb_agenda_sub.quantidadeagendada_reserva) AS vagasDiponiveis ";
    $whareTipoVagaDisponivel  = "AND (quantidadevagas_reserva!='' AND quantidadeagendada_reserva IS NOT NULL) AND (quantidadevagas_reserva-quantidadeagendada_reserva)>0 ";    
    $whereLimitaDiasAbertura  = " AND (concat(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'))<='$dataLimiteReserva') ";
    $descricaoVagasDiponiveis = "Reserva - disponível";
  break;
}

$sqlUnidadesVagas = "SELECT ucase(tb_procedimento_agendalaboratorio.nfantasia_estabelecimento) AS nomeUnidade,
codigoestabelecimento_cnes
FROM (
    SELECT DISTINCT reg_tb_agenda_grupoprocedimento.codigoestabelecimento_cnes, reg_tb_agenda_grupoprocedimento.id_procedimento, tb_estabelecimento.nfantasia_estabelecimento
      FROM reg_tb_agenda_grupoprocedimento    
      INNER JOIN tb_estabelecimento ON (reg_tb_agenda_grupoprocedimento.codigoestabelecimento_cnes=tb_estabelecimento.codigoestabelecimento_cnes) 
      INNER JOIN reg_tb_agenda_sub ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda_grupoprocedimento.id_agenda) 
      INNER JOIN reg_tb_agenda ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda) 
      LEFT OUTER JOIN reg_tb_parametro_profissional ON (reg_tb_parametro_profissional.codigoprofissional_cnes = reg_tb_agenda.codigoprofissional_cnes)     
      WHERE (reg_tb_agenda_sub.id_grupo_procedimento='$idGrupoProcedimento')
      $whareTipoVaga
      AND (reg_tb_agenda.status_agenda='A') 
      AND (reg_tb_agenda_sub.status_agenda='A') 
      AND (concat(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'), ' ', reg_tb_agenda_sub.horario_inicioagenda)>'$diaHoraHoje')
      $whereLimitaDiasAbertura 
      AND (reg_tb_agenda_sub.unidade_afastada='N') 
      AND (reg_tb_agenda_sub.profissional_afastado='N')       
      AND (reg_tb_agenda.codigoestabelecimento_cnes IN($idUnidadesReferencia))
) AS tb_procedimento_agendalaboratorio
GROUP BY codigoestabelecimento_cnes
HAVING 
SUM(tb_procedimento_agendalaboratorio.id_procedimento IN ($idProcedimento)) = $contarProceimentos";
$stmUnidadesVagas  = $rsConexao->prepare($sqlUnidadesVagas);
$stmUnidadesVagas  -> execute();

if($stmUnidadesVagas->rowCount()>0){
  
  $rsUnidadesVagas = $stmUnidadesVagas->fetchAll(PDO :: FETCH_ASSOC);
  foreach($rsUnidadesVagas AS $fieldUnidade){
    $codigoUnidade    = $fieldUnidade['codigoestabelecimento_cnes'];
    $nomeUnidade      = $fieldUnidade['nomeUnidade'];    
    $unidadeWhere     = $fieldUnidade['codigoestabelecimento_cnes'];
    if($fieldUnidade['codigoestabelecimento_cnes'] != $codigoUnidadeHeader){
      $contadorUnidades = $contadorUnidades+1;
      if($contadorUnidades>1){
        $styleMarginTop = "style='margin-top:-22px !important;'";
      }
      $htmlRetorno .= "<div id='accordionWrap$contadorUnidades' $styleMarginTop>
      <div class='card collapse-icon accordion-icon-rotate;'>
        <div id='heading42' class='card-header bg-blue' style='padding:10px !important'>
          <a data-toggle='collapse' data-parent='#accordionWrap$contadorUnidades' href='#acordProcedimentos$contadorUnidades' aria-expanded='false' aria-controls='acordProcedimentos$contadorUnidades' class='card-title lead white collapsed'>
            <i class='icofont icofont-hospital'></i> <b>$nomeUnidade</b>
          </a>
        </div>
        <div id='acordProcedimentos$contadorUnidades' role='tabpanel' aria-labelledby='heading42' class='border-blue card-collapse collapse' aria-expanded='false'>
          <div class='card-content'>
            <div class='card-body' style='padding:10px !important; font-weight: bold;'>
              <table>";
                  $sqlListarVagas = "SELECT 'SEM PROCEDIMENTO' AS teste, reg_tb_agenda_sub.id_agenda_sub, 
                  reg_tb_agenda.id_agenda,
                  reg_tb_agenda.codigoestabelecimento_cnes,
                  reg_tb_agenda.status_agenda,
                  concat(lpad(reg_tb_agenda_sub.dia_agenda,2,'0'),'/',lpad(reg_tb_agenda_sub.mes_agenda,2,'0'),'/',reg_tb_agenda_sub.ano_agenda) as dataAgenda,
                  concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda,2,'0'),'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0')) as diaSemana, 
                  reg_tb_agenda_sub.horario_inicioagenda,
                  ucase(tb_profissional.nome_profissional) AS nomeProfissinoal, 
                  $complementoSQLVagaDisponivel
                  FROM reg_tb_agenda
                  INNER JOIN tb_profissional ON (reg_tb_agenda.codigoprofissional_cnes = tb_profissional.codigoprofissional_cnes)
                  INNER JOIN reg_tb_agenda_sub ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda) 
                  INNER JOIN reg_tb_agenda_grupoprocedimento ON (reg_tb_agenda_grupoprocedimento.id_agenda = reg_tb_agenda.id_agenda) 
                  LEFT OUTER JOIN reg_tb_parametro_profissional ON (reg_tb_parametro_profissional.codigoprofissional_cnes = reg_tb_agenda.codigoprofissional_cnes)
                  WHERE (reg_tb_agenda_grupoprocedimento.id_grupo_procedimento='$idGrupoProcedimento')
                  AND (reg_tb_agenda.codigoestabelecimento_cnes = '$unidadeWhere')
                  AND (reg_tb_agenda.status_agenda = 'A')
                  AND (reg_tb_agenda_sub.status_agenda='A')
                  AND (concat(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0'), ' ', reg_tb_agenda_sub.horario_inicioagenda)>'$diaHoraHoje')
                  $whereLimitaDiasAbertura
                  $whereOciosas
                  AND (reg_tb_agenda_sub.profissional_afastado='N')
                  AND (reg_tb_agenda_sub.unidade_afastada='N')
                  $whareTipoVagaDisponivel
                  GROUP BY concat(lpad(reg_tb_agenda_sub.dia_agenda, 2, '0'),'/',lpad(reg_tb_agenda_sub.mes_agenda, 2, '0'),'/',reg_tb_agenda_sub.ano_agenda),
                    concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda, 2, '0'),'-',lpad(reg_tb_agenda_sub.dia_agenda, 2, '0')),
                    reg_tb_agenda_sub.horario_inicioagenda, 
                    ucase(tb_profissional.nome_profissional)                      
                  ORDER BY concat(reg_tb_agenda_sub.ano_agenda,'-',lpad(reg_tb_agenda_sub.mes_agenda,2,'0'),'-',lpad(reg_tb_agenda_sub.dia_agenda,2,'0')) ASC,
                  reg_tb_agenda_sub.horario_inicioagenda ASC";

                $stmListarVagas = $rsConexao->prepare($sqlListarVagas);
                $stmListarVagas -> execute();

                if($stmListarVagas->rowCount()>0){
                  $rsListarVagas  = $stmListarVagas->fetchAll(PDO :: FETCH_ASSOC);                  
                  foreach($rsListarVagas AS $fieldVagas){
                    $contadorLinhasVagas  = $contadorLinhasVagas+1;
                    $nomeProfissinoal = $fieldVagas['nomeProfissinoal'];
                    $idAgenda         = $fieldVagas['id_agenda'];
                    $idAgendaVaga     = $fieldVagas['id_agenda_sub'];
                    $dataAgenda       = $fieldVagas['dataAgenda'];               
                    $datavaga         = $fieldVagas['diaSemana'];
                    $diaSemana        = traduzirDiaSemanaAgendamento("retorna-nome-completo",date('l', strtotime($fieldVagas['diaSemana'])));
                    $horarioAgenda    = $fieldVagas['horario_inicioagenda'];
                    $vagasDiponiveis  = $fieldVagas['vagasDiponiveis'];
                    $vagasDiponiveis  = "<font style='color:#02aa18'>( disponível : $vagasDiponiveis )</font>";
                    
                    if($dataAgendaCor!=$fieldVagas['dataAgenda'] && $contadorLinhasVagas>1){
                      $setCorlinhaData = "style='border-top: 2px solid #2ea6f1'";
                    }else{
                      $setCorlinhaData = "style='border-bottom: 1px solid #e4e4e4; border-top: 1px solid #e4e4e4'";
                    }
                    $htmlRetorno .= "<tr $setCorlinhaData>
                    <td align='center' width='20px' height='30px'>
                      <input type='radio' id='checkProcedimento#$idAgenda#$idAgendaVaga#$tipoVaga#$datavaga#$nomeProfissinoal' name='checkProcedimento' class='form-control checkbox-seleciona-procedimento-grupo' onchange='pegarIdVagaSelecionada(this.id)'>
                    </td>
                    <td style='padding-left:10px'>
                      $dataAgenda - $diaSemana - $horarioAgenda - $nomeProfissinoal - $vagasDiponiveis
                    </td>
                    </tr>";
                    $dataAgendaCor = $dataAgenda;
                  }
                }
        $htmlRetorno .="</table>
              </div>
            </div>
          </div>
        </div>
      </div>";      
    }
    $codigoUnidadeHeader  = $codigoUnidade;
  }
  echo $htmlRetorno;
}else{
  echo "nenhumaVaga";
}
?>