Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

patrickpkk

restringir dados.

Recommended Posts

Bom dia, eu tenho um form no qual ele cadastra ferias, selecionando os funcionarios no combo box que ja foram cadastrados no db, é possivel que eu apenas mostre os nomes dos funcionarios que:


1° Não tiraram férias esse ano.


2° Tem a data de admissao de no minimo um ano atras.


segue abaixo o meu codigo:


<?php


include "config.php";

if($_SERVER['REQUEST_METHOD'] == 'POST'){


$idcolab = $_POST['nome'];

$datai = $_POST['datai'];

$datai = implode("-",array_reverse(explode("/",$datai)));

$dias = $_POST['dias'];

$newdate = date('d/m/Y', strtotime("+$dias days",strtotime($datai)));

$newdate = implode("-",array_reverse(explode("/",$newdate)));



if ($dias == 20){


$pecuniario = 10;

}else {

$pecuniario = 0;

}



$x = mysql_query("INSERT INTO ferias.cadastroferias (idcolab,datai,dataf,dias,pecuniario) VALUES ('$idcolab','$datai','$newdate','$dias','$pecuniario')");

$newdate = date('d/m/Y', strtotime("+$dias days",strtotime($datai)));


if($x && $pecuniario == 10){

echo"<script language='javascript' type='text/javascript'>

alert('Cadastro efetuado com sucesso, $dias dias de ferias ,$pecuniario dias de periodo pecuniario e com termino previsto para o dia $newdate');

window.location.href='ferias1pag.php';

</script>";


}else if ($x && $pecuniario == 0){

echo "<script language='javascript' type='text/javascript'>

alert('Cadastro efetuado com sucesso, $dias dias de ferias e com termino previsto para o dia $newdate');

window.location.href='ferias1pag.php';

</script>";

}else {

echo"O cadastro nao pode ser efetuado. ";

echo mysql_error();

}

}




?>

<html>

<head>

<style>

#botao{ text-align: center }

.botaoEnviar{

text-align: center;

-webkit-border-radius: 10px 20px;

}

border-radius: 10px;

.form {

border: 2px solid #0000FF;

}

</style>

<script language="javascript">

function Data(){

var datai = form1.datai.value;

if (datai.before(new Date()) {

alert ('Por favor insira uma data valida');

form1.datai.focus();

return false;


}

</script>

<script language="JavaScript">

function validaRadio() {

if (document.form1.dias[0].checked == false && document.form1.dias[1].checked == false) {

alert('Por favor, selecione o tempo de ferias');

return false;

}

return true;

}

</script>

<script>

function redir(v){

window.location.href='?idempresa='+v;

}

</script>

<script language="javascript">

function validaSelect() {

var nome = form1.nome.value;

if (nome == "Colaboradores disponiveis para cadastro de ferias...") {

alert("Selecione um colaborador");

form1.nome.focus();

return false;

}

}

</script>

<title>Cadastro de Férias</title>

<body>

<?php


include ("config.php");


$query = mysql_query("SELECT id,nome,datad FROM cadastrocolab");



function inverteData($data){

if(count(explode("/",$data)) > 1){

return implode("-",array_reverse(explode("/",$data)));

}elseif(count(explode("-",$data)) > 1){

return implode("/",array_reverse(explode("-",$data)));

}

}



?>

<div align="center">

<form name="form1" method="post" action="" onSubmit="return validaRadio();">

<table width="0%" border="0" cellspacing="0" bgcolor="#fff" >

<tr>

<td width="365" align="" bgcolor="#494949"><strong><font color="#fff" face="verdana" style=" font-family: serif; font-size: 20px;"> Cadastro de férias oficiais </font></strong></td><br>

</tr>

</table>

<table>

<tr>

<td height="98" valign="top" bgcolor="#E7E6EF"> <table width="" height="50" border="" cellspacing="0">

<tr>

<td style="background-color: #E7E6EF" >Nome:</td>

<td><select id="nome" name="nome" >

<option>Colaboradores disponíveis para cadastro de férias...</option>

<?php while($prod = mysql_fetch_array($query)){

if($prod['id'] == $_GET['nome'])

$selected = " selected ";else

$selected = "";

?>

<option value="<?php echo $prod['id']?> " <?php echo $selected; ?> > <?php echo $prod['nome']?> </option>

<?php } ?>

</tr>

<tr>

<td style="background-color: #E7E6EF" >Férias Ínicio: </td>

<td width="" style="background-color: #F5F5F5"><input name="datai" type="date" size="68" min="<?php echo date('Y-m-d') ?>" required> ex: 24/05/2015</td>

</tr>

<tr>

<td style="background-color: #E7E6EF" >Tempo de férias: </td>

<td width="" style="background-color: #F5F5F5"><input type="radio" name="dias" value="20"> 20 Dias <input type="radio" name="dias" value="30"> 30 Dias </td>

</tr>


</table>


<div id="botao">

<input type="submit" class="botaoEnviar" value="Enviar" style="color: #FFF; background-color: #9C9C9C;" onclick="return validaSelect()" onclick="return Data()"> <input type="button" class="botaoEnviar" style="color: #FFF; background-color: #9C9C9C;" value="Voltar ao menu principal"onclick="javascript: location.href='ferias1pag.php';" /></td>

</div>

</form>

</div>


</body>

</html>



Compartilhar este post


Link para o post
Compartilhar em outros sites

Como foi citado neste post, pode ser resolvido no banco de dados.

 

Qual a estrutura das tabelas? Como sabe quando os funcionários tiveram suas férias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

table cadastroferias

 

id

int(11) NO PRI NULL auto_increment datai date NO NULL dataf date NO NULL idcolab int(11) unsigned NO NULL dias int(11) NO NULL pecuniario int(11)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro ponto

 

1° Não tiraram férias esse ano.

 

Checar todos os colaboradores, utilizando um LEFT JOIN na tabela com relacionamento das férias, sendo que quem já saiu de férias deve ter sido à mais de um ano.
SELECT c.id, c.nome, MAX(f.dataf) AS ultimas_ferias
FROM cadastrocolab AS c
LEFT JOIN cadastroferias AS f
  ON f.idcolab = c.id
GROUP BY c.id

Os colaboradores que tiver o campo últimas férias em branco (NULL), quer dizer que nunca teve férias, caso contrário, será exibida a data de fim das últimas férias.

 

 

Segundo ponto
2° Tem a data de admissao de no minimo um ano atras.
Apenas um WHERE resolve:
SELECT id, nome, datad
FROM cadastrocolab
WHERE datad <= SUBDATE(NOW(), INTERVAL 1 YEAR)

Desta forma, serão exibidos os funcionários que foram admitidos á mais de um ano, contando da data atual do banco.

 

 

 

Junção dos pontos

 

Agora as duas consultas devem ser unidas. Basicamente a primeira query será implantada na segunda, pois é a mais simples. Porém, a junção deverá ser uma tabela virtual para o resultado exigido.

SELECT *
FROM (
  SELECT c.id, c.nome, c.datad, MAX(f.dataf) AS ultimas_ferias
  FROM cadastrocolab AS c
  LEFT JOIN cadastroferias AS f
    ON f.idcolab = c.id
  WHERE c.datad <= SUBDATE(NOW(), INTERVAL 1 YEAR)
  GROUP BY c.id
) AS v
WHERE v.ultimas_ferias <= SUBDATE(NOW(), INTERVAL 1 YEAR)

PS: Fiz meio as pressas, perdoe-me se não funcionar. :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro ponto

 

1° Não tiraram férias esse ano.

 

Checar todos os colaboradores, utilizando um LEFT JOIN na tabela com relacionamento das férias, sendo que quem já saiu de férias deve ter sido à mais de um ano.
SELECT c.id, c.nome, MAX(f.dataf) AS ultimas_ferias
FROM cadastrocolab AS c
LEFT JOIN cadastroferias AS f
  ON f.idcolab = c.id
GROUP BY c.id

Os colaboradores que tiver o campo últimas férias em branco (NULL), quer dizer que nunca teve férias, caso contrário, será exibida a data de fim das últimas férias.

 

 

Segundo ponto
2° Tem a data de admissao de no minimo um ano atras.
Apenas um WHERE resolve:
SELECT id, nome, datad
FROM cadastrocolab
WHERE datad <= SUBDATE(NOW(), INTERVAL 1 YEAR)

Desta forma, serão exibidos os funcionários que foram admitidos á mais de um ano, contando da data atual do banco.

 

 

 

Junção dos pontos

 

Agora as duas consultas devem ser unidas. Basicamente a primeira query será implantada na segunda, pois é a mais simples. Porém, a junção deverá ser uma tabela virtual para o resultado exigido.

SELECT *
FROM (
  SELECT c.id, c.nome, c.datad, MAX(f.dataf) AS ultimas_ferias
  FROM cadastrocolab AS c
  LEFT JOIN cadastroferias AS f
    ON f.idcolab = c.id
  WHERE c.datad <= SUBDATE(NOW(), INTERVAL 1 YEAR)
  GROUP BY c.id
) AS v
WHERE v.ultimas_ferias <= SUBDATE(NOW(), INTERVAL 1 YEAR)

PS: Fiz meio as pressas, perdoe-me se não funcionar. :unsure:

 

 

Lokaodomau o select da admissao deu muito certo, ja o de quem n tirou ferias no mesmo ano não funcionou

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.