<?php
require_once(dirname(__FILE__).'/autoload.php');
protegeArquivo(basename(__FILE__));
class validacao extends base
{
	public function __construct($campos=array()){
		parent::__construct();

	}
    
    public function validaDataEntrada($dataBruta)
	{
	   if($dataBruta==""):
	      $dataBruta=date("d/m/Y"); 
          //echo("cod004foi atribuida a data do dia databruta=$dataBruta<br>");
	   endif;
	   $sessao=new sessao();
	   $anocorrente=$sessao->getVar("anocorrente");
	   //echo("anocorrentexxxxxx $anocorrente <br>");
	   $data = explode("/","$dataBruta"); // fatia a string $dat em pedados, usando / como referência
	   $d = $data[0];
	   $m = $data[1];
	   $y = $data[2];
	   $yn=$y*1;
	   $montagem=$d.'/'.$m.'/'.$y;
	   $res = checkdate($m,$d,$y);//sintaxe basica do checkdate
		// 1 = true (válida)  0 = false (inválida)
	   $anoAtual=date('Y');	
       //if($y!=$anoAtual || $res != 1):
       if($res != 1): //valida data inclusive do ano anterior
	       $final="invalida";
	   else:
           $final=$y."-".$m."-".$d;
	   endif;
	   //emergencias dia 08012020
       if(strlen($montagem)<10)$final="invalida";
       if($yn<2000)$final="invalida";
       //echo("dentro da classe $d $m $yn   $final <br>");
	   
	   return $final; 
	   
	       	   
    }

    public function converteDataBrasil_americana($dataBruta)
	{
	   if($dataBruta==""):
	      $dataBruta=date("d/m/Y"); 
          //echo("cod005foi atribuida a data do dia databruta=$dataBruta<br>");
	   endif;
	   $sessao=new sessao();
	   //echo("anocorrentexxxxxx $anocorrente <br>");
	   $data = explode("/","$dataBruta"); // fatia a string $dat em pedados, usando / como referência
	   $d = $data[0];
	   $m = $data[1];
	   $y = $data[2];
	   $res = checkdate($m,$d,$y);
		// 1 = true (válida)  0 = false (inválida)
       if($res != 1):
	       $final="invalida";
	   else:
           $final=$y."-".$m."-".$d;
	   endif;
       return $final;     	   
    }




    public function validaData($dataBruta)
	{
       $sessao=new sessao();
	   $anocorrente=$sessao->getVar("anocorrente");
	   //echo("anocorrentexxxxxx $anocorrente <br>");
	   $data = explode("/","$dataBruta"); // fatia a string $dat em pedados, usando / como referência
	   $d = $data[0];
	   $m = $data[1];
	   $y = $data[2];
	   $res = checkdate($m,$d,$y);
		// 1 = true (válida)  0 = false (inválida)
       if($res != 1):
	       $final="invalida";
	   else:
           $final=$y."-".$m."-".$d;
	   endif;
       return $final;     	   
    }

		

	public function validaRepresentatividade($r1,$r2,$r3,$r4)
	{
	    //se for toneladas ou kg ele despreza o que foi eventualmente deixado apos
	    if($r2=="t" || $r2=='kg' || $r2=='g' || $r2=='Pelets' || $r2=='Sementes'):
 			$repreGravar=$r1." ".$r2." ";
		else:
			if($r3>0 && $r4!=" "):
			    $repreGravar=$r1." ".$r2." ".$r3." ".$r4." ";
			elseif($r2=='-O-' || $r4=='-O-'):	
			    $repreGravar=$r1." ".$r2." ";
			elseif($r2=="pouches"):
			    //$r4="sementes";
			    $repreGravar=$r1." ".$r2." ".$r3." ".$r4." ";
			else:
   		        $repreGravar='invalida';
			endif;	  
		endif;
        return $repreGravar;
	}
	
	//valida cpnp
	function valida_cnpj ( $cnpj ) {
    // Deixa o CNPJ com apenas números
    $cnpj = preg_replace( '/[^0-9]/', '', $cnpj );
    
    // Garante que o CNPJ é uma string
    $cnpj = (string)$cnpj;
    
	//echo("ddddentro da classe validacao cnpj= $cnpj<br> ");
	
	
    // O valor original
    $cnpj_original = $cnpj;
    
    // Captura os primeiros 12 números do CNPJ
    $primeiros_numeros_cnpj = substr( $cnpj, 0, 12 );
    
    /**
     * Multiplicação do CNPJ
     *
     * @param string $cnpj Os digitos do CNPJ
     * @param int $posicoes A posição que vai iniciar a regressão
     * @return int O
     *
     */
    if ( ! function_exists('multiplica_cnpj') ) {
        function multiplica_cnpj( $cnpj, $posicao = 5 ) {
            // Variável para o cálculo
            $calculo = 0;
            
            // Laço para percorrer os item do cnpj
            for ( $i = 0; $i < strlen( $cnpj ); $i++ ) {
                // Cálculo mais posição do CNPJ * a posição
                $calculo = $calculo + ( $cnpj[$i] * $posicao );
                
                // Decrementa a posição a cada volta do laço
                $posicao--;
                
                // Se a posição for menor que 2, ela se torna 9
                if ( $posicao < 2 ) {
                    $posicao = 9;
                }
            }
            // Retorna o cálculo
            return $calculo;
        }
    }
    
    // Faz o primeiro cálculo
    $primeiro_calculo = multiplica_cnpj( $primeiros_numeros_cnpj );
    
    // Se o resto da divisão entre o primeiro cálculo e 11 for menor que 2, o primeiro
    // Dígito é zero (0), caso contrário é 11 - o resto da divisão entre o cálculo e 11
    $primeiro_digito = ( $primeiro_calculo % 11 ) < 2 ? 0 :  11 - ( $primeiro_calculo % 11 );
    
    // Concatena o primeiro dígito nos 12 primeiros números do CNPJ
    // Agora temos 13 números aqui
    $primeiros_numeros_cnpj .= $primeiro_digito;
 
    // O segundo cálculo é a mesma coisa do primeiro, porém, começa na posição 6
    $segundo_calculo = multiplica_cnpj( $primeiros_numeros_cnpj, 6 );
    $segundo_digito = ( $segundo_calculo % 11 ) < 2 ? 0 :  11 - ( $segundo_calculo % 11 );
    
    // Concatena o segundo dígito ao CNPJ
    $cnpj = $primeiros_numeros_cnpj . $segundo_digito;
    
    // Verifica se o CNPJ gerado é idêntico ao enviado
    if ( $cnpj === $cnpj_original ) {
        return true;
    }
}
	
//funcao para validar o cpf
function valida_cpf( $cpf = false ) {
    // Exemplo de CPF: 025.462.884-23
    
    /**
     * Multiplica dígitos vezes posições 
     *
     * @param string $digitos Os digitos desejados
     * @param int $posicoes A posição que vai iniciar a regressão
     * @param int $soma_digitos A soma das multiplicações entre posições e dígitos
     * @return int Os dígitos enviados concatenados com o último dígito
     *
     */
    if ( ! function_exists('calc_digitos_posicoes') ) {
        function calc_digitos_posicoes( $digitos, $posicoes = 10, $soma_digitos = 0 ) {
            // Faz a soma dos dígitos com a posição
            // Ex. para 10 posições: 
            //   0    2    5    4    6    2    8    8   4
            // x10   x9   x8   x7   x6   x5   x4   x3  x2
            //   0 + 18 + 40 + 28 + 36 + 10 + 32 + 24 + 8 = 196
            for ( $i = 0; $i < strlen( $digitos ); $i++  ) {
                $soma_digitos = $soma_digitos + ( $digitos[$i] * $posicoes );
                $posicoes--;
            }
     
            // Captura o resto da divisão entre $soma_digitos dividido por 11
            // Ex.: 196 % 11 = 9
            $soma_digitos = $soma_digitos % 11;
     
            // Verifica se $soma_digitos é menor que 2
            if ( $soma_digitos < 2 ) {
                // $soma_digitos agora será zero
                $soma_digitos = 0;
            } else {
                // Se for maior que 2, o resultado é 11 menos $soma_digitos
                // Ex.: 11 - 9 = 2
                // Nosso dígito procurado é 2
                $soma_digitos = 11 - $soma_digitos;
            }
     
            // Concatena mais um dígito aos primeiro nove dígitos
            // Ex.: 025462884 + 2 = 0254628842
            $cpf = $digitos . $soma_digitos;
            
            // Retorna
            return $cpf;
        }
    }
    
    // Verifica se o CPF foi enviado
    if ( ! $cpf ) {
        return false;
    }
 
    // Remove tudo que não é número do CPF
    // Ex.: 025.462.884-23 = 02546288423
    $cpf = preg_replace( '/[^0-9]/is', '', $cpf );
 
    // Verifica se o CPF tem 11 caracteres
    // Ex.: 02546288423 = 11 números
    if ( strlen( $cpf ) != 11 ) {
        return false;
    }   
 
    // Captura os 9 primeiros dígitos do CPF
    // Ex.: 02546288423 = 025462884
    $digitos = substr($cpf, 0, 9);
    
    // Faz o cálculo dos 9 primeiros dígitos do CPF para obter o primeiro dígito
    $novo_cpf = calc_digitos_posicoes( $digitos );
    
    // Faz o cálculo dos 10 dígitos do CPF para obter o último dígito
    $novo_cpf = calc_digitos_posicoes( $novo_cpf, 11 );
    
    // Verifica se o novo CPF gerado é idêntico ao CPF enviado
    if ( $novo_cpf === $cpf ) {
        // CPF válido
        return true;
    } else {
        // CPF inválido
        return false;
    }
}//fecha function valida cpf

    public function checaLoteRepetido($amostraLong,$lote)
	{
        //como funciona
		//primiro captura o codigo do remetente e da cultivar, daquela amostra que esta sendo pesquisada
		//depois pesquisa outras amosras que tem fic_id diferente para ver se nelas tem os mosmos lote,remetente,cultivar
	
	    $sessao = new sessao();
		$idLabo=$sessao->getVar('idLabo');
		$finalidade=$sessao->getVar('finalidade');
		$anoCorrente=$sessao->getVar('anocorrente');
        //$mensagem='inicial'.$lote.$amostraLong;
        $mensagem='';
	    //echo("amostraLong= $amostraLong<br>");
    		//ENTRA DE QUAKQUER MANEIRA
			$generica=new tabelagenerica();
			$generica->tabela="ficha";
			$generica->campos_valores = array(
					"fic_id" => NULL,
					"fic_safra" => NULL,
					"fic_produtor" => NULL,
					"fic_cultivar" => NULL,
					"fic_lote" => NULL,
					"fic_amostra" => NULL,
					"fic_amostra_previa" => NULL,
				);
			$generica->extras_select =" where fic_id =".$amostraLong;	
			$generica->selecionaCampos($generica);
			while ($resgenerica= $generica->retornaDados()):
               $codprodutor=$resgenerica->fic_produtor;
               $codcultivar=$resgenerica->fic_cultivar;
            endwhile;

            //vai pesquisar aquele lote especidifico
    		//ENTRA DE QUAKQUER MANEIRA
			$generica=new tabelagenerica();
			$generica->tabela="ficha";
			$generica->campos_valores = array(
					"fic_id" => NULL,
					"fic_safra" => NULL,
					"fic_produtor" => NULL,
					"fic_cultivar" => NULL,
					"fic_lote" => NULL,
					"fic_amostra" => NULL,
					"fic_amostra_previa" => NULL,
				);
			//$generica->extras_select =" where fic_id !=".$amostraLong." and fic_lote='".$lote."' and fic_ano='".$anoCorrente."' && fic_labo=" . $idLabo;	
			$generica->extras_select =" where  fic_lote='".$lote."' and fic_ano='".$anoCorrente."' && fic_labo=" . $idLabo. " and fic_cultivar=" .$codcultivar."  and fic_produtor=".$codprodutor;	
			$generica->selecionaCampos($generica);
			//echo("xxxxxxxxxxxxxxxxxxxxxxxxxxxextraselect= $generica->extras_select <br>");
			$amostraEncontrada="";
			$mensagem="";
			
			while ($resgenerica= $generica->retornaDados()):
                 $amostraLongLocal=$resgenerica->fic_id;
            endwhile;
            if($amostraLongLocal!=$amostraLong):
                $mensagem="Amostra encontrada=".$amostraLongLocal;  
				//echo("sssss $amostraLongLocal<br>");    
			endif;
	   return $mensagem;


 
    
	}//fim da funcao checa lote repetido

	
	
	
}//fecha classe
?>