Calendário que Marca quartos em uso (Projeto Hotel)

Bom dia pessoal eu estou desenvolvendo uma aplicação no SC no modo blank, comecei do 0 e estou tendo algumas dificuldades, só estou utilizando PHP e HTML.

A aplicação pinta colunas de um grid de acordo com o intervalo de dias que o quarto foi solicitado, e como a diária é marcada a partir de meio-dia o meu chefe teve a brilhante ideia de pintar os quadrinhos pela metade, quando fosse o início do intervalo e o fim do intervalo, então eu fiz.

Segue abaixo a imagem e o código:
Grid

Código:

?>
<html>
<head>
	
	<title>Calendário de Hospedagem</title>
	<meta NAME="GENERATOR" CONTENT="OpenOffice.org">
	<meta NAME="CREATED" CONTENT="OpenOffice">
	<meta NAME="CHANGED" CONTENT="Robert Berbert">
	
	<style>
		td {
			border: 1px solid black;
		}
		table {
			border: 1px solid black;
		}
		.tdDias {
			width: 30px;
			text-align: center;
		}
		<!-- 
		body,DIV,table,Thead,tbody,TFOOT,tr,TH,td,P { font-family:"Liberation Sans"; font-size:x-small }
		 --> 
	</style>
	
</head>

<body TEXT="#000000">



<?php
//Caso a data nao seja passada através da URL então ele pega a data atual do sistema
if (empty($_GET['data'])) {
$dia = date("d");
$mes = date("m");
$ano = date("Y");
}
else {
$data = explode('/',$_GET['data']);
$dia = $data[0];
$mes = $data[1];
$ano = $data[2];
}

//Caso o mês seja janeiro (1) entao o mês anterior será dezembro (12), além de fazer o decréscimo de um ano
if($mes == 1) {
$mes_ant = 12;
$ano_ant = $ano - 1;
}
else{
$mes_ant = $mes - 1;
$ano_ant = $ano;
}


//Caso o mês seja dezembro (12) entao o mês anterior será janeiro (1), além de fazer o acréscimo de um ano
if($mes==12){
$mes_prox = 1;
$ano_prox = $ano + 1;
}
else{
$mes_prox = $mes + 1;
$ano_prox = $ano;
}

// Dados da data atual
$hoje = date("d");
$mesAtual = date("m");
$anoAtual = date("Y");

//Faz um switch para mostrar o mês em português!
switch($mes){
case "01" : $mesext = "Janeiro"; break;
case "02" : $mesext = "Fevereiro"; break;
case "03" : $mesext = "Março"; break;
case "04" : $mesext = "Abril"; break;
case "05" : $mesext = "Maio"; break;
case "06" : $mesext = "Junho"; break;
case "07" : $mesext = "Julho"; break;
case "08" : $mesext = "Agosto"; break;
case "09" : $mesext = "Setembro"; break;
case "10" : $mesext = "Outubro"; break;
case "11" : $mesext = "Novembro"; break;
case "12" : $mesext = "Dezembro"; break;
}

//Primeiro dia do mês, variável usada para calcular o primeiro dia do mês no formato semanal (domingo….)!
$primeiroDiaNum = mktime(0,0,0,$mes,1,$ano);

//Primeiro dia no formato semanal
$primeiroDiaLet = date('D', $primeiroDiaNum);

//Switch usado para calcular as colunas em branco antes do primeiro dia do mês,
//usado na montagem da tabela do calendário
switch($primeiroDiaLet){
case "Sun": $blank = 0; break;
case "Mon": $blank = 1; break;
case "Tue": $blank = 2; break;
case "Wed": $blank = 3; break;
case "Thu": $blank = 4; break;
case "Fri": $blank = 5; break;
case "Sat": $blank = 6; break;
}

//Cálculo de quantos tidas o mês possui
$diasDoMes = cal_days_in_month(0,$mes,$ano);
?>

<!-- Montagem da tabela de calendário, adicionando o link para o mês anterior e o link para o prócimo mês
bem como escrevendo o mês por extenso! -->
<table FRAME=VOID CELLSPACING=0 RULES=NONE BORDER=0 align="center">
	<tbody>
		<tr align='center'>
			<td></td>
			<td><a href="?data=<?php echo $dia."/".$mes_ant."/".$ano_ant; ?>"> << </a></td>
			<td colspan=29><font size="1"><strong><?php echo $mesext." / ".$ano; ?></strong></font></td>
			<td><a href="?data=<?php echo $dia."/".$mes_prox."/".$ano_prox; ?>"> >> </a></td>
		</tr>
		<tr>
			<td width=70 height=18><font face="Calibri" color="#000000">Quartos</font></td>
<?php
//Variável usada para quebrar a tabela em semanas (7 dias)
$contDias = 1;

// Loop de todos os dias do mês
for ($y=1; $y <= $diasDoMes; $y++){
//If usado para realçar o dia atual e também a data caso seja clicado em algum dia qualquer
if($y == $hoje){
echo "<td class='tdDias'><strong><a href=?data=".$y."/".$mes."/".$ano.">".$y."</a></strong></td>";
}else{
if($y == $dia){
echo "<td class='tdDias' bgcolor='#cccccc'><a href=?data=".$y."/".$mes."/".$ano.">".$y."</a></td>";
}else{
echo "<td class='tdDias'><a href=?data=".$y."/".$mes."/".$ano.">".$y."</a></td>";
}
}
} // Fim do FOR

// Completa colunas para 31 dias.
if ($diasDoMes < 31){
$completa = 31 - $diasDoMes;
for ($w=0; $w < $completa; $w++) {
echo "<td align='center'>-</td>";
}
}

echo "</tr>";

// Verifica OS quartos
$check_sql = "SELECT CODIGO, NOME"
   . " FROM HOT001";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]}))     // Encontrado
{
	for ($g=0; $g<count({rs}); $g++) {
		// Armazena Informações do Quarto em variáveis
		$codigo = {rs[$g][0]};
		$quarto = {rs[$g][1]};
		// Variável que verifica se o dia é preenchido ou não.			
		$verificar = false;
		
		// Inicia Linha (Quarto) e a primeira coluna com o nome do quarto.
		echo "<tr>";
		echo "<td height=18><font face='Calibri' color='#000000'>".$quarto."</font></td>";
		
		// SQL que pega intervalo que será preenchido com as imagens coloridas.
		$sql_pinta = "SELECT DATA_ENTRADA, DATA_SAIDA from HOT003 WHERE COD_SUITE = ".$codigo." ORDER BY DATA_SAIDA";
		sc_select(dados, $sql_pinta);
		
		if ({dados} === false)
		{
			echo "Erro de acesso. Mensagem = " . {dados_erro};
		}
		else if (isset($dados->fields[0]))
		{
			// Enquanto existir intervalos Verifica-se
			while (!$dados->EOF){
				// Gerando o for para 31 colunas, representando max. 31 dias.
				for ($u=1; $u<=31; $u++) {
					if ($u < 10) {
						// Dia atual que se passa na linha.
						$diaAtual = $ano."-".$mes."-0".$u;
					}
					else {
						$diaAtual = $ano."-".$mes."-".$u;
					}
					#echo count($dados->fields[0])."<br>";
					#echo $diaAtual . "-" . $dados->fields[1] . "<br>";
					
					// Se o dia atual for = dia inicial do intervalo do banco.
					if ($diaAtual == $dados->fields[0]) {
						echo "<td class='tdDias'><img src='../_lib/img/inicial.png'></td>";
						// Variavel recebe true iniciando o ciclo do intervalo.
						$verificar = true;
					}
					// Se o dia atual for = dia final do intervalo do banco.
					else if ($diaAtual == $dados->fields[1]) {
						echo "<td class='tdDias'><img src='../_lib/img/final.png'></td>";
						// Variavel = false finalizando o ciclo do intervalo.
						$verificar = false;
						// Se ainda contiver dados move para a próxima linha.
						if (count($dados->fields[0]) != 0)
						{
							$dados->MoveNext();
						}
					}
					else {
						if ($verificar == false) {
							echo "<td class='tdDias'></td>";
						}
					    else {
							if ($u > $diasDoMes) {
								// Se o mes não tiver 31 dias completa com vazio.
								echo "<td class='tdDias'></td>";
							}
							else {
								// Se não, o dia está dentro do intervalo e seta imagem completa.
								echo "<td class='tdDias'><img src='../_lib/img/completo.png'></td>";
							}
						}
					}
				}
				$dados->Close();
			} 
		}
		else {
			for ($u=1; $u<=31; $u++) {
				echo "<td class='tdDias'></td>";
			}
		}
		echo "</tr>";
	}
}
	
?>
		
<?php
echo "<tr align='left'>
<td colspan=32><b>Hoje: ".$hoje."/".$mesAtual."/".$anoAtual."</b></td>
</tr>";
?>
	</tr>
	</tbody>
</table>
<!-- ************************************************************************** -->
</body>
</html>
<?php

Estrutura das tabelas:
// Suíte (Quarto)
CREATE TABLE HOT001 (
CODIGO INTEGER NOT NULL,
NOME VARCHAR(80),
STATUS INTEGER DEFAULT 0,
TIPO INTEGER DEFAULT 0,
DESCRICAO VARCHAR(300)
);
// Tabela de Preços.
CREATE TABLE HOT002 (
CODIGO INTEGER NOT NULL,
TIPO INTEGER DEFAULT 0,
VALOR NUMERIC(10,2),
TIPO_SUITE INTEGER NOT NULL
);
// Hospedagem
CREATE TABLE HOT003 (
CODIGO INTEGER NOT NULL,
COD_CLIENTE INTEGER NOT NULL,
COD_SUITE INTEGER NOT NULL,
STATUS INTEGER,
DATA_ENTRADA DATE,
DATA_SAIDA DATE,
);

Eu estou encontrando problemas quando eu tenho um intervalo que começa em um mês e termina em outro, o resto ficou do jeito que eu queria, o grid ainda está sem CSS mas eu pretendo faze-lo em breve.

Eu gostaria de uma opinião de fora, uma visão diferente do meu código, se alguém tiver disposição de entende-lo e puder dar uma ajudinha, fico grato.

vlw Galera.

Só pra adiantar pra galera eu consegui fazer quando começa em um mês e termina em outro. Agora tá ficando show. xD

Eu preciso que no evento AfterInsert da pré_reserva, feche a janela e atualize o grid.

Vejam o exemplo:

http://svconesoft.no-ip.org:8887/conehotel/grid_quartos

Eu já tentei algumas coisas como window.parent.reload().

Mas nada deu resultado até agora se alguém tiver uma ideia ai por favor compartilhe.

Obrigado.

Ola Robert
Como anda seu projeto do Hotel.

Você poderá disponibiliza-lo para o forum, ou é privado!

Sds
Paulo
Click Informatica