Autor Tópico: Mapa de Ferias  (Lida 2069 vezes)

jpinto

  • Iniciante
  • **
  • Mensagens: 62
    • SCANTEC
    • Email
Mapa de Ferias
« Online: Março 24, 2015, 09:01:36 pm »
Olá boa Noite
Estou a precisa de construir um mapa de ferias alguém conhece um projecto tipo este feito em php
« Última modificação: Março 25, 2015, 08:11:45 am por jpinto »

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:Mapa de Ferias
« Responder #1 Online: Março 25, 2015, 05:55:51 pm »
Segue a solução:

http://ojrconsultoria.com.br/sc/grid_calendario_teste/grid_calendario_teste.php

Me mande um e-mail para conversarmos sobre a aplicação:
rodrigo@ojrconsultoria.com.br

jpinto

  • Iniciante
  • **
  • Mensagens: 62
    • SCANTEC
    • Email
Re:Mapa de Ferias
« Responder #2 Online: Março 25, 2015, 06:17:33 pm »
O meu email é jpinto@scantec.pt

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:Mapa de Ferias
« Responder #3 Online: Março 26, 2015, 09:30:31 am »

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Mapa de Ferias
« Responder #4 Online: Março 27, 2015, 11:19:51 am »
Interessante Rodrigo, só não entendi bem a lógica do calendário, podes explicar? Abraço.
F. A.
Analista de Sistemas

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:Mapa de Ferias
« Responder #5 Online: Março 27, 2015, 11:28:28 am »
Bom na verdade só fiz igual ao exemplo passado pelo jpinto.
Foi bem complicado.

jpinto

  • Iniciante
  • **
  • Mensagens: 62
    • SCANTEC
    • Email
Re:Mapa de Ferias
« Responder #6 Online: Março 29, 2015, 07:41:32 am »
Junto envio o código para quem tiver esta necessidade ainda tem que ser feito alguns ajustes  foi utilizado o código do para        talianderson.web@gmail.com
 
http://scriptcase.scantec.pt:82/v8/app/ServiceWEBXX/MapaFerias/


?>
<p>
   <b>Mapa de ferias 2015<b>
      </p>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Calend&aacute;rio</title>
    <style type="text/css">
    #tbl_calendar table{
        display: table;
    }
    #tbl_calendar td{
        text-align: center;
        background-color: #FFFFFF;
        vertical-align: center;
        width: 10px;
        height: 10px;
    }
    #tbl_calendar td.mes {
        text-align: center;
        background-color: #BDBDBD;
        /*vertical-align: center;*/
        width: 10px;
        height: 5px;
    }
    #tbl_calendar td.dia {
        text-align: center;
        background-color: #BDBDBD;
        /*vertical-align: center;*/
        width: 10px;
        height: 5px;
    }     
    #tbl_calendar td.diames {
        text-align: center;
        background-color: #FFFFFF;
        /*vertical-align: center;*/
        width: 10px;
        height: 10px;
    }
    #tbl_calendar td.fds {
        text-align: center;
        background-color: #00BFFF;
        /*vertical-align: center;*/
        width: 10px;
        height: 10px;
    } 
    #dia_atual {
        background-color: green;
      }
     
    </style>
</head>
<body>

<?php
/*
     Código escrito por Talianderson Dias
     em caso de dúvidas, mande um email para talianderson.web@gmail.com
*/
date_default_timezone_set('Europe/Lisbon');
function MostreSemanas($ano) {
    $semanas = "DSTQQSSDSTQQSSDSTQQSSDSTQQSSDSTQQSSDSTQQSS";
    $dias = getMaxWeekDays($ano) + 31;

    for ($i=0; $i < $dias; $i++) {
        if ($i === 0 || $i === 6|| $i === 7|| $i === 13|| $i === 14|| $i === 20|| $i === 21|| $i === 27|| $i === 28|| $i === 34|| $i === 35) {
            echo "<td class=\"fds\">";
        } else {
            echo "<td class=\"dia\">";
        }
        echo $semanas{$i} . "</td>";
    }

 //    for ($j=0; $j < 6; $j++) {
    //     for ($i = 0; $i < 7; $i++) {
    //         echo "<td>" . $semanas{$i} . "</td>";
    //     }
    // }
}

function getMaxWeekDays($ano) {
    $diasemana = 0;
    $meses = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
    foreach ($meses as $mes) {
        $dia = jddayofweek(cal_to_jd(CAL_GREGORIAN, $mes, "01", $ano), 0);
        $diasemana = $dia>$diasemana?$dia:$diasemana;
    }

    return $diasemana;
}

function GetNumeroDias($ano, $mes) {
    $numero_dias = array(
        '01' => 31,
        '02' => 28,
        '03' => 31,
        '04' => 30,
        '05' => 31,
        '06' => 30,
        '07' => 31,
        '08' => 31,
        '09' => 30,
        '10' => 31,
        '11' => 30,
        '12' => 31
    );

    if ((($ano % 4) == 0 and ($ano % 100) != 0) or ($ano % 400) == 0) {
        $numero_dias['02'] = 29;    // altera o numero de dias de fevereiro se o ano for bissexto
    }

    return $numero_dias[$mes];
}

function GetNomeMes($mes) {
    $meses = array(
        '01' => "Janeiro",
        '02' => "Fevereiro",
        '03' => "Março",
        '04' => "Abril",
        '05' => "Maio",
        '06' => "Junho",
        '07' => "Julho",
        '08' => "Agosto",
        '09' => "Setembro",
        '10' => "Outubro",
        '11' => "Novembro",
        '12' => "Dezembro"
    );

    if ($mes >= 01 && $mes <= 12) {
        return $meses[$mes];
    }

    return "Mês deconhecido";
}


function MostreCalendario($ano, $mes) {
    $numero_dias = GetNumeroDias($ano,$mes);    // retorna o número de dias que tem o mês desejado
    $nome_mes = GetNomeMes($mes);
    $diacorrente = 0;

    $diasemana = jddayofweek(cal_to_jd(CAL_GREGORIAN, $mes, "01", $ano), 0);    // função que descobre o dia da semana
    // echo "<table border = 0 cellspacing = '0' align = 'center'>";
    // echo "<tr>";
    // echo "<td colspan = 7><h3>" . $nome_mes . "</h3></td>";
    // echo "</tr>";
    // echo "<tr><td class='mes'>&nbsp;</td>";
    // MostreSemanas();    // função que mostra as semanas aqui
    // echo "</tr>";
    // echo "<tr><td colspan=35 align='top'>&nbsp;</td></tr>";
    echo "<tr><td class='mes'><b>$nome_mes</b></td>";
    if ($diasemana > 0) {
        for ($i=0; $i < $diasemana; $i++) {
            if ($i === 0) {
                 echo "<td class='fds'>&nbsp;</td>";
            }else {
                echo "<td>&nbsp;</td>";
            }
        }
    }

    for ($i=0; $i < $numero_dias; $i++) {
        echo "<td";
        if (($diacorrente == (date('d') - 1) && date('m') == $mes)) {
                echo " id='dia_atual' ";
        } else {
            echo " ";
            // if (($diacorrente + 1) <= $numero_dias) {
            //     if ($coluna < $diasemana && $linha == 0) {
            //         echo " id='dia_branco' ";
            //     } else {
            //         echo " id='dia_comum' ";
            //     }
            // } else {
            //     echo " ";
            // }
        }

        $d = jddayofweek(cal_to_jd(CAL_GREGORIAN, $mes, ($diacorrente+1), $ano), 0);
        if ($d === 0 || $d === 6) {
            echo "class='fds'";
        }else {
            echo "class='diames'";
        }

        echo "><a href=\"".$_SERVER["PHP_SELF"]."?mes=$mes&dia=".($diacorrente+1)."\">".++$diacorrente."</a></td>";
    }

    $max = getMaxWeekDays($ano)+31;

    for ($i=$numero_dias+$diasemana; $i < $max; $i++) {
        if ($i == 34 || $i == 35) {
            echo "<td class='fds'>&nbsp;</td>";
        } else {
            echo "<td>&nbsp;</td>";
        }
    }

    // for ($linha = 0; $linha < 6; $linha++) {
    //     echo "<tr>";
    //     for ($coluna = 0; $coluna < 7; $coluna++) {
    //         echo "<td width = 30 height = 30 ";

    //         if (($diacorrente == (date('d') - 1) && date('m') == $mes)) {
    //             echo " id = 'dia_atual' ";
    //         } else {
    //             if (($diacorrente + 1) <= $numero_dias) {
    //                 if ($coluna < $diasemana && $linha == 0) {
    //                     echo " id = 'dia_branco' ";
    //                 } else {
    //                     echo " id = 'dia_comum' ";
    //                 }
    //             } else {
    //                 echo " ";
    //             }
    //         }
    //         echo ' align = "center" valign = "center">';


    //          TRECHO IMPORTANTE: A PARTIR DESTE TRECHO É MOSTRADO UM DIA DO CALENDÁRIO (MUITA ATENÇÃO NA HORA DA MANUTENÇÃO)

    //         if ($diacorrente + 1 <= $numero_dias) {
    //             if ($coluna < $diasemana && $linha == 0) {
    //                 echo " ";
    //             } else {
    //                 // echo "<input type = 'button' id = 'dia_comum' name = 'dia".($diacorrente+1)."'  value = '".++$diacorrente."' onclick = "acao(this.value)">";
    //                 echo "<a href = " . $_SERVER["PHP_SELF"] . "?mes=$mes&dia=" . ($diacorrente + 1) . ">" . ++$diacorrente . "</a>";
    //             }
    //         } else {
    //             break;
    //         }

    //         /* FIM DO TRECHO MUITO IMPORTANTE */


    //         echo "</td>";
    //     }
    //     echo "</tr>";
    // }

    // echo "</table>";
}

function MostreCalendarioCompleto($ano) {
    echo '<table id="tbl_calendar">';
    echo "<tr><td class='mes'>&nbsp;</td>";
    MostreSemanas($ano);    // função que mostra as semanas aqui
    echo "</tr>";
    MostreCalendario($ano,'01');
    MostreCalendario($ano,'02');
    MostreCalendario($ano,'03');
    MostreCalendario($ano,'04');
    MostreCalendario($ano,'05');
    MostreCalendario($ano,'06');
    MostreCalendario($ano,'07');
    MostreCalendario($ano,'08');
    MostreCalendario($ano,'09');
    MostreCalendario($ano,'10');
    MostreCalendario($ano,'11');
    MostreCalendario($ano,'12');
    // $cont = 1;
    // for ($j = 0; $j < 4; $j++) {
    //     echo "<tr>";
    //     for ($i = 0; $i < 3; $i++) {
    //         echo "<td>";
    //         MostreCalendario(($cont < 10) ? "0" . $cont : $cont);

    //         $cont++;
    //         echo "</td>";
    //     }
    //     echo "</tr>";
    // }
    echo "</table>";
}

// echo "<table id='tbl_calendar'>";
// MostreCalendario('01');
// MostreCalendario('02');
// MostreCalendario('03');
// MostreCalendario('04');
// MostreCalendario('05');
// MostreCalendario('06');
// MostreCalendario('07');
// MostreCalendario('08');
// MostreCalendario('09');
// MostreCalendario('10');
// MostreCalendario('11');
// MostreCalendario('12');
// echo "</table>";
MostreCalendarioCompleto(2015);
//MostreCalendarioCompleto([IDAno]);
?>
</body>
</html>

             
<?php
       

       
« Última modificação: Abril 04, 2015, 05:51:23 am por jpinto »

Paulo (ClickInformatica)

  • Intermediário
  • ***
  • Mensagens: 109
    • Email
Re:Mapa de Ferias
« Responder #7 Online: Setembro 11, 2015, 11:00:59 am »
Ola Amigos do forum,
estou precisando de uma solução semelhante a esta criada por jpinto e ojrconsultoria, mas a minha necessidade e para compor um quadro de reservas (sistema de hotel), mostrando os apartamentos X dias e o status de cada um ( liberado, Ocupado, Reservado), segue imagem do que eu gostaria
www.clickinformatica.net.br/MODELO_MAPA_HOSPEDAGEM.jpg

Grato
Paulo

jpinto

  • Iniciante
  • **
  • Mensagens: 62
    • SCANTEC
    • Email
Re:Mapa de Ferias
« Responder #8 Online: Setembro 11, 2015, 11:19:21 am »

Paulo (ClickInformatica)

  • Intermediário
  • ***
  • Mensagens: 109
    • Email
Re:Mapa de Ferias
« Responder #9 Online: Setembro 11, 2015, 11:28:16 am »
Ola Jpinto,
Mas com calendar, não posso colocar a lista dos apartamentos..

Agradeço a sugestão

jpinto

  • Iniciante
  • **
  • Mensagens: 62
    • SCANTEC
    • Email
Re:Mapa de Ferias
« Responder #10 Online: Setembro 11, 2015, 11:38:53 am »
Eu penso que seja possivel basta criar um filtro no sql onde estão guardados o estado dos quarto tipo Livre / ocupado, por exemplo se tenho 30 dos quais  28 estão ocupado eu posso apresentar 2 tipos de resultados dois quarto  Livre ou 28 quartos ocupados isto em cada dia do calendario.
Depois posso criar consulta para  ir mais o detalhe da informação.
« Última modificação: Setembro 11, 2015, 11:42:33 am por jpinto »