Ir para conteúdo
Fórum Script Brasil
  • 0

Escala de trabalho no PHP


jasonsv

Pergunta

Boa tarde,

Preciso montar diversas escalas de trabalhos e para isto tenho um BD com o cadastro das pessoas, preciso fazer o seguinte:

1) Selecionar as pessoas que farão parte da escala de trabalho;

2) Selecionar os dias que entrarão na escala: Ex. (DOMINGO MANHÃ, DOMINGO NOITE, QUINTA e SÁBADO). Aqui deve ficar aberto para poder selecionar outros dias;

3) Selecionar o período: Data Inicial e Final, geralmente as escalas são montadas para 6 meses;

4) Não deve sobrecarregar a pessoa num mesmo dia, por exemplo se são 4 pessoas um vai trabalhar todo domingo de manhã o outro todo domingo a noite, etc. Preciso que seja computado quantos domingos de manhã trabalho, e assim sucessivamente, havendo uma divisão para que trabalhem o mesmo número de vezes e variando os dias;

5) Preciso que fique separado por meses;

Segue código em que estou trabalhando, mas estou encontrando várias dificuldades, pois não estou conseguindo que ele divida entre um mês e outro:

<?php

include "db.php";//conexão com o banco de dados

if($db)

{

@mysql_select_db($db) ;//selecione o banco de dados

echo "Conectado... <BR><BR>";

}

$query = "SELECT * FROM cadastro ORDER BY nome ASC";

$resultado = mysql_query($query);

$i=0;

while ($linha = mysql_fetch_array($resultado))

{

$codcadastro[$i] = $linha['codcadastro'];

$nome[$i] = $linha['nome'];

echo "<input type=\"checkbox\" name=\"codcad.$i\" id=\"codcad.$i\" />" ;

echo $codcadastro[$i] ." ". $nome[$i] ."<BR>";

$i++;

}

function get_post_action($name)

{

$params = func_get_args();

foreach ($params as $name) {

if (isset($_POST[$name])) {

return $name;

}

}

}

switch (get_post_action('calcdata', 'calendario', 'publish')) {

case 'calcdata':

//save article and keep editing

calculadata();

break;

case 'calendario':

//save article and redirect

calendario();

break;

case 'publish':

//publish article and redirect

break;

default:

//no action sent

}

//Configurações script:

$fonte = "Arial";

$tamanho = "3";

$cor = '#FF0000';

$alinhamento = "center";

//Fim de Configurações

//Tradução dos Meses

$mes[1] = "janeiro";

$mes[2] = "Fevereiro";

$mes[3] = "Março";

$mes[4] = "Abril";

$mes[5] = "Maio";

$mes[6] = "Junho";

$mes[7] = "Julho";

$mes[8] = "Agosto";

$mes[9] = "Setembro";

$mes[10] = "Outubro";

$mes[11] = "Novembro";

$mes[12] = "Dezembro";

//Tradução dos dias da Semana

$semana[0] = "Domingo";

$semana[1] = "Segunda-Feira";

$semana[2] = "Terça-Feira";

$semana[3] = "Quarta-Feira";

$semana[4] = "Quinta-Feira";

$semana[5] = "Sexta-Feira";

$semana[6] = "Sábado";

//Nomes

$nome[0] = "Jason Silva Veiga";

$nome[1] = "Ulisses Junior";

$nome[2] = "Sérgio Elias";

$nome[3] = "Anderson Mendes";

$nomeCont[0] = 0;

$nomeCont[1] = 0;

$nomeCont[2] = 0;

$nomeCont[3] = 0;

$hoje = date ("Y-m-d");

//Pegar as Datas

$diasemana = date("w");

$data = date("n");

$dia = date("d");

$ano = date("Y");

//Chaves para Tradução

if($_POST){

$datain = $_POST["inicio"];

$datafi = $_POST["fim"];

}

else {

$datain = $hoje;

$datafi = $hoje;

}

echo "<form action=\"escala.php\" method=\"post\">";

echo "<BR>". $semana[$diasemana].", " . $dia . " de " . $mes[$data] ." de " . $ano .". <BR><BR>";

echo "Período de : <input type=\"date\" name=\"inicio\" value=$datain id=\"inicio\" /> a

<input type=\"date\" name=\"fim\" value=$datafi id=\"fim\" /> <BR><BR>" ;

echo "<input type=\"submit\" value=\"Dias\" name=\"calcdata\" id=\"calcdata\" /><BR><BR>";

echo "<form action=\"escala.php\" method=\"post\">";

for($i=0;$i<count($semana);$i++){

if($semana[$i] == "Domingo"){

$chavesemana = $semana[0];

echo "<input type=\"checkbox\" name=\"Domingo_Manha\" value=\"true\" id=\"Domingo_Manha\" />" ;

echo $chavesemana ." Manhã <BR>";

echo "<input type=\"checkbox\" name=\"Domingo_Noite\" value=\"true\" id=\"Domingo_Noite\" />" ;

echo $chavesemana ." Noite <BR>";

}

else{

echo "<input type=\"checkbox\" name=\"$mes[$data]\" value=\"true\" id=\"$mes[$data]\" />" ;

echo $chavesemana = $semana[$i]." <BR>";

}

//if($nomeCont[$i] ==;

}

//echo $chavedia = $dia[$i];

echo "<input type=\"submit\" value=\"Calendario\" name=\"calendario\" id=\"calendario\" /><BR><BR>";

"<BR>";

//for($i=0;$i<count($semana);$i++){

//echo $chavesemana = $semana[$i]." ";

//echo $chavedia = $dia[$i];

//echo $dia++ ."</BR>";

//}

?>

<?php

function calculadata(){

$inicio = date('Y-m-d',strtotime($_POST["inicio"]));

list($anoInicio, $mesInicio, $diaInicio) = explode('-', $inicio);

$fim = date('Y-m-d',strtotime($_POST["fim"]));

list($anoFim, $mesFim, $diaFim) = explode('-', $fim);

//$inicio = new DateTime($_POST['inicio']);

//$fim = new DateTime($_POST['fim']);

$dataInicio = mktime(0,0,0, $mesInicio, $diaInicio, $anoInicio);

$dataFim = mktime(0,0,0, $mesFim, $diaFim, $anoFim);

$erro = "Data final menor que a data inicial!";

if($dataInicio < $dataFim){

$diferenca = $dataFim - $dataInicio;

$dias = round(($diferenca/60/60/24));

echo $dias;

}

else{

echo $erro;

}

}

function calendario(){

$inicio = date('Y-m-d',strtotime($_POST["inicio"]));

list($anoInicio, $mesInicio, $diaInicio) = explode('-', $inicio);

$fim = date('Y-m-d',strtotime($_POST["fim"]));

list($anoFim, $mesFim, $diaFim) = explode('-', $fim);

//$inicio = new DateTime($_POST['inicio']);

//$fim = new DateTime($_POST['fim']);

$dataInicio = mktime(0,0,0, $mesInicio, $diaInicio, $anoInicio);

$dataFim = mktime(0,0,0, $mesFim, $diaFim, $anoFim);

$erro = "Data final menor que a data inicial!";

if($dataInicio < $dataFim){

$diferenca = $dataFim - $dataInicio;

$dias = round(($diferenca/60/60/24));

echo $dias;

}

else{

echo $erro;

}

?>

<style>

.calendario {

width: 80%;

border-collapse: collapse;

border: 1px solid #333;

background-color: #FBFBFB;

text-align: center;

}

caption {

padding: 5px 0 5px 0;

font: small-caps bold 11px verdana, arial, tahoma;

background-color: #999;

border: 1px solid #333;

}

th {

background: #F4F4F4;

}

th, td {

padding: 3px;

}

</style>

<?php

$domingo = "style=color:#C30;";

$hoje = "style=color:#CC0;";

$mes = date("m");

$dia = date("d");

$ano = date("Y");

$ano_ = substr($ano,-2);

function meses($a) {

switch($a) {

case 1: $mes = "janeiro"; break;

case 2: $mes = "fevereiro"; break;

case 3: $mes = "março"; break;

case 4: $mes = "abril"; break;

case 5: $mes = "maio"; break;

case 6: $mes = "junho"; break;

case 7: $mes = "julho"; break;

case 8: $mes = "agosto"; break;

case 9: $mes = "setembro"; break;

case 10: $mes = "outubro"; break;

case 11: $mes = "novembro"; break;

case 12: $mes = "dezembro"; break;

}

return $mes;

}

?>

<table border="0" summary="Calendário" class="calendario">

<caption><?php echo "".meses($mes)." ".$ano.""; ?></caption>

<thead>

<tr>

<th abbr="Domingo" title="Domingo"><b <?php echo("$domingo");?>>D</b></th>

<th abbr="Segunda" title="Segunda"><b>S</b></th>

<th abbr="Terça" title="Terça"><b>T</b></th>

<th abbr="Quarta" title="Quarta"><b>Q</b></th>

<th abbr="Quinta" title="Quinta"><b>Q</b></th>

<th abbr="Sexta" title="Sexta"><b>S</b></th>

<th abbr="Sábado" title="Sábado"><b>S</b></th>

</tr>

</thead>

<tbody>

<?php

$Data = strtotime($mes."/".$dia."/".$ano_);

$Dia = date('w',strtotime(date('n/\1\/Y',$Data)));

//$Dias = date('t',$Data);

$Dias = $dias;

for ($i=1,$d=1;$d<=$Dias;) {

echo("<tr>");

for ($x=1;$x<=7 && $d <= $Dias;$x++,$i++) {

if ($i > $Dia) {

$destaque = '';

if ($x == 1) { $destaque = $domingo; }

if ($d == $dia) { $destaque = $hoje; }

if (($x == 1) && ($d == $dia)) { $destaque = $hoje; }

echo("<td ".$destaque.">".$d++."</td>");

}

else { echo("<td> </td>"); }

}

for (;$x<=7;$x++) { echo("<td> </td>"); }

echo("</tr>");

}

?>

</tbody>

</table>

&lt;script type="text/javascript">

// Declara variáveis

var data,ano,mes,bissexto,meses,qnt;

// Obtém a data atual

data=new Date();

// Obtém o ano atual

ano=data.getFullYear();

// Obtém o mês atual

mes=data.getMonth();

// Verifica se o ano é bissexto, para definir a quantidade de dias do mês Fevereiro

bissexto=(((ano%4)==0&&(ano%100)!=0)||(ano%400)==0)

?29:28;

// Array das quantidades de dias de cada mês

meses=new Array(31,bissexto,31,30,31,30,31,31,30,31,30,31);

// Quantidade de dias do mês atual

qnt=meses[mes];

// Imprime

document.write("O mês atual contém "+qnt+" dias");

</script>

<?php

}

?>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Boa Noite!

Recentemente precisei criar um software para uma empresa de serviços, e uma das necessidades eram as escalas.

Tinham Pessoas que trabalhava dia sim, dia não;

Outras trabalhavam 4 dias e 2 não

Outras Trabalhavam 5 dias e 1 Não

Outras Trabalhavam 6 dias e 1 Não

Outras 5 dias e um não

Como pode ver, uma escala bastante complexa.

Mas para que fosse montada, tive que separar a parte visual, dos dados.

Porque enquanto eu pensava apenas visualmente, não conseguia criar uma forma legal de lançamentos de dados.

Sugiro que encontre um padrão para cada escala, que citou, e então programe baseado nisso.

Se precisar de ajuda fique a vontade.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...