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.