<?php
session_start();
require("../../database/dbConection.php");
$idUsuarioLogado = $_SESSION['idUsuarioLogado'];

$idGrupoProcedimento  = $_POST['grupoProcedimento'];
$idProcedimento       = $_POST['nomeProcedimento'];
$dataInicioVaga       = $_POST['dataInicioVaga'];
$dataFinalVaga        = $_POST['dataFinalVaga'];

//* LIMPAR DADOS TEMPORÁRIOS *//
$stmLimparDados       = $rsConexao->prepare("DELETE FROM reg_zdados_relatoriovagas WHERE id_usuario_relatorio='$idUsuarioLogado'");
$stmLimparDados->execute();
$stmReiniciaContador  = $rsConexao->prepare("ALTER TABLE reg_zdados_relatoriovagas AUTO_INCREMENT=1");
$stmReiniciaContador->execute();
//***************************//

$dataHoje = date("Y-m-d H:i");
$dataHoje = DateTime::createFromFormat('Y-m-d H:i', $dataHoje);
$dataHoje->add(new DateInterval('PT2M'));
$dataInicioWhere = $dataHoje->format('Y-m-d');
$horaInicioWhere = $dataHoje->format('H:i');

# ----- PARAMETRIZAÇÃO DA CLÁUSULA WHERE ----- #
$setWhere = " WHERE (reg_tb_agenda_sub.id_agenda_sub>0) ";
$setWhere = $idProcedimento == "" ? $setWhere : $setWhere . " AND (reg_tb_agenda_sub.id_procedimento='$idProcedimento')";
# ------ PREPARAR SQL PARA REGISTRO --------#

if ($idGrupoProcedimento == 1) { // GRUPO 1 = NÃO AGRUPADOS
  $sqlVagas = "INSERT INTO reg_zdados_relatoriovagas(
    nome_procedimento,
    data_vaga,
    saldo_vagas,
    nome_estabelecimento,
    nome_profissional,
    id_usuario_relatorio
  )SELECT reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) AS dataVaga,
  SUM(reg_tb_agenda_sub.quantidadevagas_pvez)- SUM(reg_tb_agenda_sub.quantidadegendada_pvez)AS saldoVagas,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional,
  '$idUsuarioLogado' AS id_usuario_relatorio
  FROM reg_tb_agenda
  INNER JOIN tb_estabelecimento ON (reg_tb_agenda.codigoestabelecimento_cnes = tb_estabelecimento.codigoestabelecimento_cnes)
  INNER JOIN reg_tb_procedimento ON (reg_tb_agenda.id_procedimento = reg_tb_procedimento.id_procedimento)
  INNER JOIN reg_tb_agenda_sub ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda)
  INNER JOIN tb_profissional ON (reg_tb_agenda.codigoprofissional_cnes = tb_profissional.codigoprofissional_cnes)
  $setWhere
  AND (reg_tb_agenda_sub.id_grupo_procedimento='$idGrupoProcedimento')
  AND (reg_tb_agenda_sub.status_agenda='A')
  AND (reg_tb_agenda.status_agenda='A')
  AND (reg_tb_agenda_sub.profissional_afastado = 'N')
  AND (reg_tb_agenda_sub.unidade_afastada = 'N')
  AND (reg_tb_agenda_sub.quantidadevagas_pvez IS NOT NULL and reg_tb_agenda_sub.quantidadevagas_pvez!='')
  AND (CONCAT(reg_tb_agenda_sub.ano_agenda,'-', reg_tb_agenda_sub.mes_agenda,'-', LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) BETWEEN '$dataInicioVaga' and '$dataFinalVaga')  
  GROUP BY reg_tb_agenda_sub.status_agenda,
  reg_tb_agenda_sub.mes_agenda,
  reg_tb_agenda_sub.quantidadevagas_pvez,
  reg_tb_agenda_sub.quantidadegendada_pvez,
  reg_tb_agenda_sub.ano_agenda,
  reg_tb_agenda_sub.dia_agenda,
  reg_tb_agenda_sub.id_procedimento,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional
  HAVING (SUM(reg_tb_agenda_sub.quantidadevagas_pvez)-SUM(reg_tb_agenda_sub.quantidadegendada_pvez)>0)
  ORDER BY reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')), 
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional";  
  $stmVagas = $rsConexao->prepare($sqlVagas);
  $stmVagas->execute();
  $stmVagas->closeCursor();
} else if ($idGrupoProcedimento != 1 && $idGrupoProcedimento != "") { // DEMAIS GRUPOS DIFERENTES DE NÃO AGRUPADOS
  $sqlVagas = "INSERT INTO reg_zdados_relatoriovagas(
    nome_procedimento,
    data_vaga,
    saldo_vagas,
    nome_estabelecimento,
    nome_profissional,
    id_usuario_relatorio
  )SELECT reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) AS dataVaga,
  sum(reg_tb_agenda_sub.quantidadevagas_pvez)-sum(reg_tb_agenda_sub.quantidadegendada_pvez) AS saldoVagas,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional,
  '$idUsuarioLogado' AS id_usuario_relatorio
  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) AND (reg_tb_agenda_sub.id_grupo_procedimento = reg_tb_agenda.id_grupo_procedimento)
  INNER JOIN reg_tb_agenda_grupoprocedimento ON (reg_tb_agenda_grupoprocedimento.id_agenda = reg_tb_agenda.id_agenda) AND (reg_tb_agenda_grupoprocedimento.id_grupo_procedimento = reg_tb_agenda_sub.id_grupo_procedimento)
  INNER JOIN reg_tb_procedimento ON (reg_tb_procedimento.id_procedimento = reg_tb_agenda_grupoprocedimento.id_procedimento)  AND (reg_tb_procedimento.id_grupo_procedimento = reg_tb_agenda_grupoprocedimento.id_grupo_procedimento) AND (reg_tb_procedimento.id_grupo_procedimento = reg_tb_agenda_sub.id_grupo_procedimento)
  INNER JOIN tb_estabelecimento ON (reg_tb_agenda.codigoestabelecimento_cnes = tb_estabelecimento.codigoestabelecimento_cnes)
  $setWhere
  AND (reg_tb_agenda_sub.id_grupo_procedimento='$idGrupoProcedimento')
  AND (reg_tb_agenda_sub.status_agenda = 'A')
  AND (reg_tb_agenda.status_agenda = 'A')
  AND (reg_tb_agenda_sub.profissional_afastado = 'N')
  AND (reg_tb_agenda_sub.unidade_afastada = 'N')
  AND (reg_tb_agenda_sub.quantidadevagas_pvez IS NOT NULL AND reg_tb_agenda_sub.quantidadevagas_pvez <> '')
  AND (CONCAT(reg_tb_agenda_sub.ano_agenda,'-', reg_tb_agenda_sub.mes_agenda,'-', LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) BETWEEN '$dataInicioVaga' and '$dataFinalVaga') 
  GROUP BY reg_tb_agenda_sub.mes_agenda,
  reg_tb_agenda_sub.ano_agenda,
  reg_tb_agenda_sub.dia_agenda,
  reg_tb_procedimento.nome_procedimento,
  tb_estabelecimento.nfantasia_estabelecimento
  HAVING (SUM(reg_tb_agenda_sub.quantidadevagas_pvez) - SUM(reg_tb_agenda_sub.quantidadegendada_pvez) > 0)
  ORDER BY 2 ASC,
  tb_estabelecimento.nfantasia_estabelecimento ASC,
  tb_profissional.nome_profissional ASC";
  //file_put_contents('sqlrel.sql', $sqlVagas);  
  $stmVagas = $rsConexao->prepare($sqlVagas);
  $stmVagas->execute();
  $stmVagas->closeCursor();

} else {  // TODOS OS GRUPOS E PROCEDIMENTOS SELECIONADOS

  $sqlVagas = "INSERT INTO reg_zdados_relatoriovagas(
    nome_procedimento,
    data_vaga,
    saldo_vagas,
    nome_estabelecimento,
    nome_profissional,
    id_usuario_relatorio
  )SELECT reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) AS dataVaga,
  SUM(reg_tb_agenda_sub.quantidadevagas_pvez)- SUM(reg_tb_agenda_sub.quantidadegendada_pvez)AS saldoVagas,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional,
  '$idUsuarioLogado' AS id_usuario_relatorio
  FROM reg_tb_agenda
  INNER JOIN tb_estabelecimento ON (reg_tb_agenda.codigoestabelecimento_cnes = tb_estabelecimento.codigoestabelecimento_cnes)
  INNER JOIN reg_tb_procedimento ON (reg_tb_agenda.id_procedimento = reg_tb_procedimento.id_procedimento)
  INNER JOIN reg_tb_agenda_sub ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda)
  INNER JOIN tb_profissional ON (reg_tb_agenda.codigoprofissional_cnes = tb_profissional.codigoprofissional_cnes)
  $setWhere  
  AND (reg_tb_agenda_sub.status_agenda='A')
  AND (reg_tb_agenda.status_agenda='A')
  AND (reg_tb_agenda_sub.profissional_afastado = 'N')
  AND (reg_tb_agenda_sub.unidade_afastada = 'N')
  AND (reg_tb_agenda_sub.quantidadevagas_pvez IS NOT NULL and reg_tb_agenda_sub.quantidadevagas_pvez!='')
  AND (CONCAT(reg_tb_agenda_sub.ano_agenda,'-', reg_tb_agenda_sub.mes_agenda,'-', LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) BETWEEN '$dataInicioVaga' and '$dataFinalVaga') 
  GROUP BY reg_tb_agenda_sub.status_agenda,
  reg_tb_agenda_sub.mes_agenda,
  reg_tb_agenda_sub.quantidadevagas_pvez,
  reg_tb_agenda_sub.quantidadegendada_pvez,
  reg_tb_agenda_sub.ano_agenda,
  reg_tb_agenda_sub.dia_agenda,
  reg_tb_agenda_sub.id_procedimento,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional
  HAVING (SUM(reg_tb_agenda_sub.quantidadevagas_pvez)-SUM(reg_tb_agenda_sub.quantidadegendada_pvez)>0)
  ORDER BY reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')), 
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional";

  $stmVagas = $rsConexao->prepare($sqlVagas);
  $stmVagas->execute();
  $stmVagas->closeCursor();

  $sqlVagas = "INSERT INTO reg_zdados_relatoriovagas(
    nome_procedimento,
    data_vaga,
    saldo_vagas,
    nome_estabelecimento,
    nome_profissional,
    id_usuario_relatorio
  )SELECT reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) AS dataVaga,
  reg_tb_agenda_sub.quantidadevagas_pvez-reg_tb_agenda_sub.quantidadegendada_pvez AS saldoVagas,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional,
  '$idUsuarioLogado' AS id_usuario_relatorio
  FROM reg_tb_agenda_sub
  INNER JOIN reg_tb_agenda ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda)
  INNER JOIN tb_estabelecimento ON (reg_tb_agenda.codigoestabelecimento_cnes = tb_estabelecimento.codigoestabelecimento_cnes)
  INNER JOIN tb_profissional ON (reg_tb_agenda.codigoprofissional_cnes = tb_profissional.codigoprofissional_cnes)
  INNER JOIN reg_tb_agenda_grupoprocedimento ON (reg_tb_agenda_grupoprocedimento.id_agenda = reg_tb_agenda.id_agenda)
  INNER JOIN reg_tb_procedimento ON (reg_tb_procedimento.id_procedimento = reg_tb_agenda_grupoprocedimento.id_procedimento) AND (reg_tb_procedimento.id_grupo_procedimento = reg_tb_agenda_grupoprocedimento.id_grupo_procedimento)
  $setWhere
  AND (reg_tb_agenda_sub.status_agenda='A')
  AND (reg_tb_agenda.status_agenda='A')
  AND (reg_tb_agenda_sub.profissional_afastado = 'N')
  AND (reg_tb_agenda_sub.unidade_afastada = 'N')
  AND (reg_tb_agenda_sub.quantidadevagas_pvez IS NOT NULL and reg_tb_agenda_sub.quantidadevagas_pvez!='')
  AND (CONCAT(reg_tb_agenda_sub.ano_agenda,'-', reg_tb_agenda_sub.mes_agenda,'-', LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')) BETWEEN '$dataInicioVaga' and '$dataFinalVaga')  
  GROUP BY reg_tb_agenda_sub.status_agenda,
  reg_tb_agenda_sub.mes_agenda,
  reg_tb_agenda_sub.quantidadevagas_pvez,
  reg_tb_agenda_sub.quantidadegendada_pvez,
  reg_tb_agenda_sub.ano_agenda,
  reg_tb_agenda_sub.dia_agenda,
  reg_tb_agenda_sub.id_procedimento,
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional
  HAVING (SUM(reg_tb_agenda_sub.quantidadevagas_pvez)-SUM(reg_tb_agenda_sub.quantidadegendada_pvez)>0)
  ORDER BY reg_tb_procedimento.nome_procedimento,
  CONCAT(reg_tb_agenda_sub.ano_agenda,'-',reg_tb_agenda_sub.mes_agenda,'-',LPAD(reg_tb_agenda_sub.dia_agenda, 2, '0')), 
  tb_estabelecimento.nfantasia_estabelecimento,
  tb_profissional.nome_profissional";
  $stmVagas = $rsConexao->prepare($sqlVagas);
  $stmVagas->execute();
  $stmVagas->closeCursor();
  
}

?>