Exemple #1
0
 public function updateTotals(Profissional $pProf, Registro $pRegistro)
 {
     try {
         // atualiza os totais
         $oRegistro = new Registro();
         $oRegistro = $this->getByDate($pProf, $pRegistro->getData());
         $t = 0;
         switch ($oRegistro->getFlag()) {
             case 6:
                 // entrada manhã + saída manhã
                 $s = $oRegistro->getEntradaManha();
                 $e = $oRegistro->getSaidaManha();
                 $t = Data::getTimeDifference($s, $e);
                 $t = Data::timeToDecimal($t);
                 break;
             case 18:
                 // entrada manhã + saída tarde
                 $s = $oRegistro->getEntradaManha();
                 $e = $oRegistro->getSaidaTarde();
                 $t = Data::getTimeDifference($s, $e);
                 $t = Data::timeToDecimal($t);
                 break;
             case 24:
                 // entrada tarde + saída tarde
                 $s = $oRegistro->getEntradaTarde();
                 $e = $oRegistro->getSaidaTarde();
                 $t = Data::getTimeDifference($s, $e);
                 $t = Data::timeToDecimal($t);
                 break;
             case 30:
                 // tudo
                 $s = $oRegistro->getEntradaManha();
                 $e = $oRegistro->getSaidaManha();
                 $t1 = Data::getTimeDifference($s, $e);
                 $t1 = Data::timeToDecimal($t1);
                 $s = $oRegistro->getEntradaTarde();
                 $e = $oRegistro->getSaidaTarde();
                 $t2 = Data::getTimeDifference($s, $e);
                 $t2 = Data::timeToDecimal($t2);
                 $t = $t1 + $t2;
                 break;
         }
         $oPeriodo = new Periodo();
         $oPeriodo->setInicial($oRegistro->getData());
         $oPeriodo->setFinal($oRegistro->getData());
         $vTrabalhar = $pProf->getHorasTrabalharNoPeriodo($oPeriodo);
         $vSaldo = $t - $vTrabalhar;
         $t100 = 0;
         $t50 = 0;
         //se tiver saldo e o dia for s�bado, � hora extra a 50%
         //se for domingo ou feriado, � hora extra a 100%
         $vData = new DateTime($oRegistro->getData());
         if ($vSaldo > 0) {
             switch (Data::getTipoDia($vData)) {
                 case "Domingo":
                     $t100 = $vSaldo;
                     break;
                 case "Feriado":
                     $t100 = $vSaldo;
                     break;
                 default:
                     $t50 = $vSaldo;
                     break;
             }
         }
         $sql = "UPDATE hor_frequencia SET total = {$t} , h_50 = {$t50}, h_100 = {$t100}\n            WHERE data = '{$vData->format("Y-m-d")}' AND cod_prof_funcao = {$pProf->getCodProfFuncao()};";
         parent::executar($sql);
     } catch (Exception $e) {
         throw new Exception($e->getMessage());
     }
 }
Exemple #2
0
 public function podeClicar(Profissional $pProf, Registro $pRegistro)
 {
     $pData = new DateTime($pRegistro->getData());
     /**
             return true;
     
             // checa se o ponto est� bloqueado
             // caso positivo, n�o pode clicar 
             $sql = "SELECT locked " .
                 "FROM hor_frequencia " .
                 "WHERE data = '" . $pData->format("Y-m-d") . "' " .
                 "AND cod_prof_funcao = " . $pCodProfFuncao . ";";
             $rs = $this->obterRecordSet($sql);
             if($rs[0]["locked"])
             {
                 return false;
             }
     **/
     // checa se o profissional est� na lista de programa��o
     $sql = "SELECT entrada, saida " . "FROM hor_autorizacoes " . "WHERE cod_prof_funcao = {$pCodProfFuncao} " . "AND '" . $pData->format("Y-m-d") . "' >= inicio " . "AND '" . $pData->format("Y-m-d") . "' <= fim " . "ORDER BY data ASC;";
     $rs = $this->obterRecordSet($sql);
     if ($rs) {
         if ($pTurno == "entrada" || $pTurno == "retorno") {
             if ($pHora >= $rs[0][$pTurno]) {
                 return true;
             }
         } else {
             if ($pTurno == "almoco" || $pTurno == "saida") {
                 if ($pHora <= $rs[0][$pTurno]) {
                     return true;
                 }
             }
         }
     }
     // proibe clicagem final de semana e feriado
     $vArray = array("Sábado", "Domingo", "Feriado");
     if (in_array(Data::getTipoDia($pData), $vArray)) {
         return false;
     }
     // checa se está clicando dentro da faixa permitida
     $oHorarioPadrao = new HorarioPadrao($pProf->getCodProfFuncao(), $pData->format("w"));
     switch ($pRegistro->getCampo()) {
         case "entrada":
             $hora = Data::addHoras($oHorarioPadrao->getToleranciaAntes(), $oHorarioPadrao->getEntrada());
             if ($pRegistro->getHora() < $hora) {
                 return false;
             }
             break;
         case "almoco":
             die($oHorarioPadrao->getToleranciaAntes());
             if ($pRegistro->getHora() > $oHorarioPadrao->getAlmoco()) {
                 return false;
             }
             break;
         case "retorno":
             if ($pRegistro->getHora() < $oHorarioPadrao->getRetorno()) {
                 return false;
             }
             break;
         case "saida":
             $hora = Data::addHoras($oHorarioPadrao->getToleranciaDepois(), $oHorarioPadrao->getSaida());
             echo "pode clicar até: {$hora}<br>";
             echo "clicando: {$pRegistro->getHora()}<br>";
             if ($pRegistro->getHora() > $hora) {
                 return false;
             }
             break;
     }
     return true;
 }